1. ホーム
  2. javascript

[解決済み] TypeScriptでenumに値が存在するかどうかを確認する

2022-02-15 23:44:09

質問

番号を受け取る type = 3 で、この enum に存在するかどうかをチェックする必要があります。

export const MESSAGE_TYPE = {
    INFO: 1,
    SUCCESS: 2,
    WARNING: 3,
    ERROR: 4,
};

私が見つけた最良の方法は、すべてのEnum値を配列として取得し、それに対してindexOfを使用することです。しかし、出来上がったコードはあまり読みやすいものではありません。

if( -1 < _.values( MESSAGE_TYPE ).indexOf( _.toInteger( type ) ) ) {
    // do stuff ...
}

もっと簡単な方法はないのでしょうか?

どのように解決するのですか?

これを文字列列列挙型で動作させたい場合は 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
}