Recibo un número type = 3
y tengo que verificar si existe en esta enumeración:
export const MESSAGE_TYPE = {
INFO: 1,
SUCCESS: 2,
WARNING: 3,
ERROR: 4,
};
La mejor manera que encontré es obtener todos los valores de Enum como una matriz y usar indexOf en él. Pero el código resultante no es muy legible:
if( -1 < _.values( MESSAGE_TYPE ).indexOf( _.toInteger( type ) ) ) {
// do stuff ...
}
¿Hay una manera más simple de hacer esto?
javascript
typescript
enums
Tim Schoch
fuente
fuente
if(Object.values(MESSAGE_TYPE).includes(+type)
? No hay mucho que puedas hacer.!!MESSAGE_TYPE[type]
para verificar si existe un valor.MESSAGE_TYPE[type]
volverá indefinido si el valor detype
no existe enMESSAGE_TYPE
0
.MESSAGE_TYPE[type] !== undefined
Respuestas:
Si desea que esto funcione con enumeraciones de cadenas, debe usarlas
Object.values(ENUM).includes(ENUM.value)
porque las enumeraciones de cadenas no se asignan de forma inversa, de acuerdo con https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-4.html :se convierte en:
Entonces solo necesitas hacer:
Si obtiene un error para:
Property 'values' does not exist on type 'ObjectConstructor'
entonces no está apuntando a ES2017. Puede usar esta configuración tsconfig.json:O simplemente puedes hacer cualquier reparto:
fuente
Property 'values' does not exist on type 'ObjectConstructor'
.(<any>Object).values(Vehicle).includes(Vehicle.car)
(Object.values(Vehicle).includes(Vehicle.car))
siempre será verdadera, pero la pregunta es cómo verificar que un valor dado esté incluido en la enumeración, por ejemplo,(Object.values(Vehicle).includes('car'))
debería devolvertrue
pero(Object.values(Vehicle).includes('plane'))
debería devolver falso.Si está utilizando TypeScript, puede usar una enumeración real . Entonces puedes verificarlo usando
in
.Esto funciona solo si su enumeración está basada en números y no está marcada
const
:Esto funciona porque cuando compila la enumeración anterior, genera el siguiente objeto:
fuente
export const MESSAGE_TYPE = { ... }
MESSAGE_TYPE
a una enumeración real como usted sugirió y ahora su solución funciona de maravilla. Gracias @SaravanaTypeScript v3.7.3
fuente
Hay una solución muy simple y fácil para su pregunta:
fuente
Resultado de diferencia en el registro:
La solución, necesitamos eliminar la clave como un número.
Uso
fuente
Según la respuesta de Ryan Cavanaugh , simplemente puede hacer lo siguiente para verificar si un valor está contenido en una enumeración dada:
fuente