【发布时间】:2016-08-02 11:41:58
【问题描述】:
在 Typescript 中,我得到一个 string 变量,其中包含我定义的 enum 的名称。
我现在如何获取此枚举的所有值?
【问题讨论】:
-
你可以使用反射,比如这篇文章stackoverflow.com/questions/15338610/…。无论如何,我首先会考虑这是否是正确的方式,或者您可以以“正常”方式访问它
标签: typescript enums
在 Typescript 中,我得到一个 string 变量,其中包含我定义的 enum 的名称。
我现在如何获取此枚举的所有值?
【问题讨论】:
标签: typescript enums
打字稿枚举:
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 方法的替代方法,您可以执行以下操作:
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
【讨论】: