TypeScript の列挙型に値が存在するかどうかを確認する 質問する

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('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
}

おすすめ記事