【问题标题】:Get enum values by enum name string通过枚举名称字符串获取枚举值
【发布时间】:2016-08-02 11:41:58
【问题描述】:

在 Typescript 中,我得到一个 string 变量,其中包含我定义的 enum 的名称。

我现在如何获取此枚举的所有值?

【问题讨论】:

标签: typescript enums


【解决方案1】:

打字稿枚举:

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

另见How to programmatically enumerate an enum type in Typescript 0.9.5?

【讨论】:

  • Window[enumname] 不起作用,可能是因为我们使用了命名空间。但是“eval(enumname)”确实有效。
  • 有没有对 React 友好的替代方案?
【解决方案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

【讨论】:

  • 如果我们有枚举的实例,那么很容易获得值列表。问题是我们如何从字符串值中获取枚举实例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多