通过枚举名称字符串获取枚举值

7
在Typescript中,我得到了一个包含我定义的枚举名称的string变量。
现在我该如何获取此枚举的所有值?

你可以使用反射,类似于这篇文章https://dev59.com/zWUp5IYBdhLWcg3wVWiv。不过,我建议先考虑是否这是正确的方法,或者你能否以“正常”的方式访问它。 - iberbeu
2个回答

6

Typescript 枚举:

enum MyEnum {
    First, Second
}

被转译为JavaScript对象:

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');

另请参见如何在TypeScript 0.9.5中以编程方式枚举枚举类型?


Window [enumname] 没有起作用,可能是因为我们使用了命名空间。但是 "eval(enumname)" 起作用了。 - Jochen Kühner
有没有适用于React的替代方案? - Dhanraj Acharya

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

如果我们有枚举的实例,那么很容易获取值列表。问题是如何从字符串值获取枚举实例。 - Dhanraj Acharya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接