2016-08-02 14 views
3

In Typescript bekomme ich eine string Variable, die den Namen meiner definierten enum enthält.Holen Sie sich Enum-Werte von enum name string

Wie kann ich jetzt alle Werte dieser Enumeration erhalten?

+0

könnten Sie Reflexion, etwas wie diesen Beitrag http://stackoverflow.com/questions/15338610/dynamically-loading-a-typescript-class-re verwenden Flection-for-typescript. Jedenfalls würde ich zuerst denken, ob das der richtige Weg ist, oder Sie können auf "normale" Weise darauf zugreifen. – iberbeu

Antwort

5

Typoskript Enum:

enum MyEnum { 
    First, Second 
} 

auf JavaScript-Objekt transpiled:

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

Sie enum Instanz von window["EnumName"] bekommen:

const MyEnumInstance = window["MyEnum"]; 

Weiter Sie mit Enum Elementwerte erhalten können :

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

Und Enum Mitgliedernamen mit:

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

Siehe auch How to programmatically enumerate an enum type in Typescript 0.9.5?

+0

Fenster [enumname] hat nicht funktioniert, vielleicht weil wir Namespaces verwenden. Aber "eval (enumname)" hat funktioniert. –

2

Als Alternative zu dem window Ansatz, dass die anderen Antworten bieten, können Sie folgendes tun:

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