Я получил номер 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 ...
}
Есть ли более простой способ сделать это?
javascript
typescript
enums
Тим Шох
источник
источник
if(Object.values(MESSAGE_TYPE).includes(+type)
? Там не так много, вы можете сделать.!!MESSAGE_TYPE[type]
проверить, существует ли значение.MESSAGE_TYPE[type]
вернет undefined, если значениеtype
не существует наMESSAGE_TYPE
0
, хотя одно из значений enum сопоставляется .MESSAGE_TYPE[type] !== undefined
Ответы:
Если вы хотите, чтобы это работало со строковыми перечислениями, вам нужно использовать это,
Object.values(ENUM).includes(ENUM.value)
потому что строковые перечисления не отображаются в обратном порядке, согласно https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-4.html :будет выглядеть так:
Так что вам просто нужно сделать:
Если вы получили сообщение об ошибке:,
Property 'values' does not exist on type 'ObjectConstructor'
значит, вы не ориентируетесь на ES2017. Вы можете использовать эту конфигурацию tsconfig.json:Или вы можете просто сделать любой актерский состав:
источник
Property 'values' does not exist on type 'ObjectConstructor'
.(<any>Object).values(Vehicle).includes(Vehicle.car)
(Object.values(Vehicle).includes(Vehicle.car))
всегда будет верным, но вопрос в том, как проверить, что заданное значение включено в enum, например,(Object.values(Vehicle).includes('car'))
должно возвращаться,true
но(Object.values(Vehicle).includes('plane'))
должно возвращать false.Если вы используете TypeScript, вы можете использовать фактическое перечисление . Тогда вы можете проверить это с помощью
in
.Это работает, только если ваше перечисление основано на числе и не помечено
const
:Это работает, потому что, когда вы компилируете перечисленное выше перечисление, оно генерирует следующий объект:
источник
export const MESSAGE_TYPE = { ... }
MESSAGE_TYPE
на фактическое перечисление, как вы предложили, и теперь ваше решение работает как шарм. Спасибо @SaravanaTypeScript v3.7.3
источник
Существует очень простое и легкое решение вашего вопроса:
источник
Разница результата в журнале:
Решение, нам нужно удалить ключ в виде числа.
использование
источник
Согласно ответу Райана Кавано , вы можете просто сделать следующее, чтобы проверить, содержится ли значение в данном перечислении:
источник