2016-08-02 11 views
3

Typescriptで私は定義されたenumの名前を含むstring変数を取得します。列挙型の名前文字列で列挙型の値を取得

この列挙型のすべての値を取得するにはどうすればよいですか?

+0

あなたは反射を使用することができました、この投稿のようなものhttp://stackoverflow.com/questions/15338610/dynamically-loading-a-typescript-class-re形容詞のためのflection-for-typescript。とにかく、それが正しい方法か、それとも "普通の"方法でそれにアクセスできるかを最初に考えてみましょう。 – iberbeu

答えて

5

活字体列挙:

enum MyEnum { 
    First, Second 
} 

は、JavaScriptオブジェクトにtranspiledさ:

var MyEnum; 
(function (MyEnum) { 
    MyEnum[MyEnum["First"] = 0] = "First"; 
    MyEnum[MyEnum["Second"] = 1] = "Second"; 
})(MyEnum || (MyEnum = {})); 

あなたはwindow["EnumName"]からenumインスタンスを取得することができます。

const MyEnumInstance = window["MyEnum"]; 

次あなたが列挙型のメンバの値を取得することができます:

const enumMemberValues: number[] = Object.keys(MyEnumInstance) 
     .map((k: any) => MyEnumInstance[k]) 
     .filter((v: any) => typeof v === 'number').map(Number); 

そして、列挙型のメンバ名:

const enumMemberNames: string[] = Object.keys(MyEnumInstance) 
     .map((k: any) => MyEnumInstance[k]) 
     .filter((v: any) => typeof v === 'string'); 

も参照してくださいHow to programmatically enumerate an enum type in Typescript 0.9.5?

+0

ウィンドウ[enumname]が動作しませんでした。おそらく名前空間を使用しているからです。しかし、 "eval(ennamame)"が機能しました。 –

2

他の回答を提供していることwindowアプローチに代わるものとしては、次の操作を行うことができます:

enum SomeEnum { A, B } 

let enumValues:Array<string>= []; 

for(let value in SomeEnum) { 
    if(typeof SomeEnum[value] === 'number') { 
     enumValues.push(value); 
    } 
} 

enumValues.forEach(v=> console.log(v)) 
//A 
//B