Eu recebo um número type = 3
e tenho que verificar se ele existe nesta enumeração:
export const MESSAGE_TYPE = {
INFO: 1,
SUCCESS: 2,
WARNING: 3,
ERROR: 4,
};
A melhor maneira que eu encontrei é obtendo todos os valores de enum como uma matriz e usando indexOf nela. Mas o código resultante não é muito legível:
if( -1 < _.values( MESSAGE_TYPE ).indexOf( _.toInteger( type ) ) ) {
// do stuff ...
}
Existe uma maneira mais simples de fazer isso?
javascript
typescript
enums
Tim Schoch
fonte
fonte
if(Object.values(MESSAGE_TYPE).includes(+type)
? Não há muito que você possa fazer.!!MESSAGE_TYPE[type]
para verificar se existe um valor.MESSAGE_TYPE[type]
irá retornar undefined se o valortype
não existir noMESSAGE_TYPE
0
, no entanto.MESSAGE_TYPE[type] !== undefined
Respostas:
Se você deseja que isso funcione com enumerações de strings, é necessário usá-
Object.values(ENUM).includes(ENUM.value)
las porque as enumerações de string não são mapeadas inversamente, de acordo com https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-4.html :torna-se:
Então você só precisa fazer:
Se você receber um erro para
Property 'values' does not exist on type 'ObjectConstructor'
:, não estará direcionando o ES2017. Você pode usar esta configuração do tsconfig.json:Ou você pode simplesmente fazer um elenco:
fonte
Property 'values' does not exist on type 'ObjectConstructor'
.(<any>Object).values(Vehicle).includes(Vehicle.car)
(Object.values(Vehicle).includes(Vehicle.car))
sempre será verdadeira, mas a questão é como verificar se um determinado valor está incluído no enum, por exemplo,(Object.values(Vehicle).includes('car'))
deve retornar,true
mas(Object.values(Vehicle).includes('plane'))
deve retornar false.Se você estiver usando o TypeScript, poderá usar uma enumeração real . Então você pode verificar usando
in
.Isso funciona apenas se sua enumeração for baseada em número e não marcada
const
:Isso funciona porque quando você compila a enumeração acima, ela gera o objeto abaixo:
fonte
export const MESSAGE_TYPE = { ... }
MESSAGE_TYPE
para uma enumeração real, como você sugeriu, e agora sua solução funciona como um encanto. Obrigado @SaravanaTypeScript v3.7.3
fonte
Existe uma solução muito simples e fácil para sua pergunta:
fonte
Resultado da diferença no log:
A solução, precisamos remover a chave como um número.
Uso
fonte