Проверьте, существует ли значение в перечислении в TypeScript
Я получаю число type = 3
и должен проверить, существует ли он в этом перечислении:
export const MESSAGE_TYPE = {
INFO: 1,
SUCCESS: 2,
WARNING: 3,
ERROR: 4,
};
Лучший способ, которым я нашел, - получить все значения Enum в виде массива и использовать indexOf. Но полученный код не очень читаем:
if( -1 < _.values( MESSAGE_TYPE ).indexOf( _.toInteger( type ) ) ) {
// do stuff ...
}
Есть ли более простой способ сделать это?
Ответы
Ответ 1
Если вы хотите, чтобы это работало с перечислениями строк, вам нужно использовать Object.values(ENUM).includes(ENUM.value)
, потому что перечисления строк не отображаются обратными, согласно https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-4.html:
Enum Vehicle {
Car = 'car',
Bike = 'bike',
Truck = 'truck'
}
становится:
{
Car: 'car',
Bike: 'bike',
Truck: 'truck'
}
Итак, вам просто нужно сделать:
if (Object.values(Vehicle).includes(Vehicle.car) {
// Do stuff here
}
Ответ 2
Если вы используете TypeScript, вы можете использовать фактическое перечисление. Затем вы можете проверить его, используя in
:
export enum MESSAGE_TYPE {
INFO = 1,
SUCCESS = 2,
WARNING = 3,
ERROR = 4,
};
var type = 3;
if (type in MESSAGE_TYPE) {
}
Это работает, потому что, когда вы скомпилируете приведенное выше перечисление, он генерирует следующий объект:
{
'1': 'INFO',
'2': 'SUCCESS',
'3': 'WARNING',
'4': 'ERROR',
INFO: 1,
SUCCESS: 2,
WARNING: 3,
ERROR: 4
}