如何获得TypeScript枚举条目的名称?

我想知道如何迭代一个TypeScript枚举和每个枚举的符号名称。

例如,

enum myEnum { entry1, entry2 } for (var entry in myEnum) { // use entry's name here, eg, "entry1" } 

您发布的代码将起作用; 它会打印出所有的枚举成员,包括枚举成员的值。 例如,下面的代码:

 enum myEnum { bar, foo } for (var enumMember in myEnum) { console.log("enum member: ", enumMember); } 

将打印以下内容:

 Enum member: 0 Enum member: 1 Enum member: bar Enum member: foo 

如果您只需要成员名称而不是值,则可以这样做:

 for (var enumMember in myEnum) { var isValueProperty = parseInt(enumMember, 10) >= 0 if (isValueProperty) { console.log("enum member: ", myEnum[enumMember]); } } 

这将打印出刚才的名字:

枚举成员:bar

枚举成员:foo

警告:这略有依赖于实现细节:TypeScript将枚举编译为JS对象,枚举值是对象的成员。 如果TS在未来决定实施它们,上述技术可能会被打破。

哇。 这样做比我想象的要容易得多,对我来说也没有任何意义。

 enum myEnum { entry1, entry2 } console.log(myEnum[myEnum.entry1]); // Will output "entry1" to the console. 

假设你坚持规则,只产生带有数值的枚举,你可以使用这个代码。 这正确处理的情况下,你有一个名字,巧合的是一个有效的数字

 enum Color { Red, Green, Blue, "10" // wat } var names: string[] = []; for(var n in Color) { if(typeof Color[n] === 'number') names.push(n); } console.log(names); // ['Red', 'Green', 'Blue', '10'] 

虽然答案已经提供,有趣的是,几乎没有人指出它有很多其他很酷的信息
这是一个片段

 enum Enum { A } let nameOfA = Enum[Enum.A]; // "A" 

对于我来说,一个更简单,实用和直接的方法来理解正在发生的事情,就是下面的列举:

 enum colors { red, green, blue }; 

将基本上转换为:

 var colors = { red: 0, green: 1, blue: 2, [0]: "red", [1]: "green", [2]: "blue" } 

因此,以下将是真实的:

 colors.red === 0 colors[colors.red] === "red" colors["red"] === 0 

这创build了一个简单的方法来获得枚举的名称,如下所示:

 var color: colors = colors.red; console.log("The color selected is " + colors[color]); 

它也创build一个很好的方式来将string转换为枚举值。

 var colorName: string = "green"; var color: colors = colors.red; if (colorName in colors) color = colors[colorName]; 

上述两种情况是非常普遍的情况,因为通常情况下,您更感兴趣的是特定值的名称和序列化值。

使用当前的TypeScript 1.8.9版本,我使用键入的枚举:

 export enum Option { OPTION1 = <any>'this is option 1', OPTION2 = <any>'this is option 2' } 

结果在这个Javascript对象中:

 Option = { "OPTION1": "this is option 1", "OPTION2": "this is option 2", "this is option 1": "OPTION1", "this is option 2": "OPTION2" } 

所以我必须通过键和值查询,只返回值:

 let optionNames: Array<any> = []; for (let enumValue in Option) { let optionNameLength = optionNames.length; if (optionNameLength === 0) { this.optionNames.push([enumValue, Option[enumValue]]); } else { if (this.optionNames[optionNameLength - 1][1] !== enumValue) { this.optionNames.push([enumValue, Option[enumValue]]); } } } 

我收到一个数组中的选项键:

 optionNames = [ "OPTION1", "OPTION2" ]; 

如果您只search名称并稍后重复使用:

 Object.keys(myEnum).map(key => myEnum[key]).filter(value => typeof value === 'string') as string[]; 

当我遇到同样的问题时,可以使用我编写的enum-values包:

Git:枚举值

 var names = EnumValues.getNames(myEnum); 

这个解决scheme也工作。

 enum ScreenType { Edit = 1, New = 2, View = 4 } var type: ScreenType = ScreenType.Edit; console.log(ScreenType[type]); //Edit 

我发现解决scheme更优雅:

 for (let val in myEnum ) { if ( isNaN( parseInt( val )) ) console.log( val ); } 

它显示:

 bar foo