typescript - Hent enum-verdier etter enum-navn som streng


I Typescript får jeg en string-variabel som inneholder navnet på min definerte enum.

Hvordan kan jeg nå få alle verdier av denne enumen?

Svar #1

Typescript enum:

enum MyEnum {
    First, Second
}

blir transpiler til JavaScript-objekt:

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

Du kan få en enum-instans fra window["EnumName"]:

const MyEnumInstance = window["MyEnum"];

Neste kan du få verdiene til enum-medlemmer med:

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

Og enum-medlemsnavn med:

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

Se også Hvordan programmere en opplistingstype i Typescript 0.9.5?

Svar #2

Som et alternativ til window-tilnærmingen som de andre svarene tilbyr, kan du gjøre følgende:

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

Relaterte artikler