番号を受け取ったら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('car')) {
// Do stuff here
}
次のエラーが発生した場合はProperty 'values' does not exist on type 'ObjectConstructor'
、ES2017 をターゲットにしていません。次の tsconfig.json 設定を使用するか、
"compilerOptions": {
"lib": ["es2017"]
}
または、 any キャストを実行することもできます。
if ((<any>Object).values(Vehicle).includes('car')) {
// Do stuff here
}