Je reçois un numéro type = 3
et je dois vérifier s'il existe dans cette énumération:
export const MESSAGE_TYPE = {
INFO: 1,
SUCCESS: 2,
WARNING: 3,
ERROR: 4,
};
Le meilleur moyen que j'ai trouvé est d'obtenir toutes les valeurs Enum sous forme de tableau et d'utiliser indexOf dessus. Mais le code résultant n'est pas très lisible:
if( -1 < _.values( MESSAGE_TYPE ).indexOf( _.toInteger( type ) ) ) {
// do stuff ...
}
Existe-t-il un moyen plus simple de procéder?
javascript
typescript
enums
Tim Schoch
la source
la source
if(Object.values(MESSAGE_TYPE).includes(+type)
? Vous ne pouvez pas faire grand-chose.!!MESSAGE_TYPE[type]
vérifier si une valeur existe.MESSAGE_TYPE[type]
renverra undefined si la valeur detype
n'existe pas surMESSAGE_TYPE
0
.MESSAGE_TYPE[type] !== undefined
Réponses:
Si vous voulez que cela fonctionne avec les énumérations de chaînes, vous devez l'utiliser
Object.values(ENUM).includes(ENUM.value)
car les énumérations de chaînes ne sont pas inversées, selon https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-4.html :devient:
Il vous suffit donc de faire:
Si vous obtenez une erreur pour
Property 'values' does not exist on type 'ObjectConstructor'
:, vous ne ciblez pas ES2017. Vous pouvez soit utiliser cette configuration tsconfig.json:Ou vous pouvez simplement faire un casting:
la source
Property 'values' does not exist on type 'ObjectConstructor'
.(<any>Object).values(Vehicle).includes(Vehicle.car)
(Object.values(Vehicle).includes(Vehicle.car))
sera toujours vraie, mais la question est de savoir comment vérifier qu'une valeur donnée est incluse dans enum, par exemple(Object.values(Vehicle).includes('car'))
doit renvoyertrue
mais(Object.values(Vehicle).includes('plane'))
doit renvoyer false.Si vous utilisez TypeScript, vous pouvez utiliser une énumération réelle . Ensuite, vous pouvez le vérifier en utilisant
in
.Cela ne fonctionne que si votre énumération est basée sur des nombres et non marquée
const
:Cela fonctionne car lorsque vous compilez l'énumération ci-dessus, cela génère l'objet ci-dessous:
la source
export const MESSAGE_TYPE = { ... }
MESSAGE_TYPE
pour une énumération réelle comme vous l'avez suggéré et maintenant votre solution fonctionne comme un charme. Merci @SaravanaTypeScript v3.7.3
la source
Il existe une solution très simple et facile à votre question:
la source
Résultat de la différence dans le journal:
La solution, nous devons supprimer la clé en tant que nombre.
Usage
la source
Selon la réponse de Ryan Cavanaugh , vous pouvez simplement faire ce qui suit pour vérifier si une valeur est contenue dans une énumération donnée:
la source