Recibo un número type = 3y 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 detypeno existe enMESSAGE_TYPE0.MESSAGE_TYPE[type] !== undefinedRespuestas:
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 devolvertruepero(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_TYPEa 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