1. ホーム
  2. enums

[解決済み] enumの項目名を取得する方法は?

2022-03-19 16:54:56

質問

TypeScriptのenumオブジェクトを繰り返し処理し、例えば列挙された各シンボル名を取得したいのですが。 enum myEnum { entry1, entry2 }.

for (var entry in myEnum) { 
    // use entry's name here, e.g., "entry1"
}

解決方法は?

投稿されたコードは動作します。enum のすべてのメンバー(enum のメンバーの値を含む)が出力されます。例えば、次のようなコードです。

enum myEnum { bar, foo }

for (var enumMember in myEnum) {
   console.log("enum member: ", enumMember);
}

次のように表示されます。

Enum member: 0
Enum member: 1
Enum member: bar
Enum member: foo

その代わりに、メンバー名だけが必要で、値は必要ない場合は、次のようにします。

for (var enumMember in myEnum) {
   var isValueProperty = parseInt(enumMember, 10) >= 0
   if (isValueProperty) {
      console.log("enum member: ", myEnum[enumMember]);
   }
}

これで名前だけが出力されます。

Enum member: bar  
Enum member: foo

注意:これは若干、実装の詳細に依存しています。TypeScriptはenumをJSオブジェクトにコンパイルし、enumの値はそのオブジェクトのメンバになる。もしTSが将来的に異なる実装をすることになった場合、上記のテクニックは破綻する可能性がある。