在Typescript中获取Enum的类名
Getting the class name of an Enum in Typescript
我的Typescript应用程序中有一些枚举,我使用类似于下面的代码来获取要在应用程序中显示的字符串值:
enum Color{ RED, BLUE, GREEN};
document.write( "The string for Red is: " + Color[Color.RED] );
但是,字符串值通常更接近于数据库键或其他与服务器相关的字符串,而不是适合显示给用户的格式化字符串。为了解决这个问题,我想加载本地化的属性文件,这些属性文件使用enum的字符串值来查找要在应用程序中显示的格式化字符串。文件可能如下所示:
Color.properties:
RED=The color is red
BLUE=The color is blue
GREEN=The color is green
我相信我可以加载这个文件并解析内容以填充一些查找以便稍后在应用程序中显示,但我不确定如何知道加载哪个属性文件。对于以下枚举
Color
Shape
Animal
我将有以下属性文件:
Color.properties
Shape.properties
Animal.properties
我的问题是:是否有任何方法从运行时javascript的颜色定义中获得字符串"颜色"?Color的Typescript代码被翻译成:
var Color;
(function (Color) {
Color[Color["RED"] = 0] = "RED";
Color[Color["BLUE"] = 1] = "BLUE";
Color[Color["GREEN"] = 2] = "GREEN";
})(Color || (Color = {}));
我不认为我可以用任何简单的方法把String Color弄出来。我假设我只需要使用switch表达式来查找文件名。
不,语言中没有任何内置功能允许您在运行时获取enum的名称。
但是,我使用了以下方法:
namespace MyEnums {
export enum Color { RED, BLUE, GREEN };
export enum Shape { ROUND, SQUARE };
export function getName(enumObj: any): string {
for (let name in MyEnums) {
if ( MyEnums[name] === enumObj && MyEnums.hasOwnProperty(name) ) {
return name;
}
}
return undefined;
}
}
const Color = MyEnums.Color;
var name = MyEnums.getName(Color);
虽然,我最终重构了我的代码,这样我就不需要在最后得到名字了
把你存储字符串的文件放在TypeScript文件中,然后使用实际的enum——Color
来进行映射,可能会更容易。
话虽如此…
是否有任何方法从运行时javascript的颜色定义中获得字符串"颜色"?
一个可靠的解决方案是使用ts-nameof.
或者,您可以使用类似的技巧,如下所示:
function getVariableName(variableFunction: () => any) {
return /'s([^'s;]+);?'s*'}$/.exec(variableFunction.toString())[1];
}
var variableName = getVariableName(() => Color); // returns string "Color"
将Color封装在函数中,然后在该函数上调用.toString()
。使用该字符串,它将只提取所提供的名称。
只要确保在最小化后测试一下是否有效。
相关文章:
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- jquery试图按名称获取按钮位置
- 如何在jQuery中获取元素的形式
- 如何在php文件中获取$.post-ajax传递的值
- 在Shopify中获取博客文章的图片
- 使用Javascript获取所选选项ID
- 在jQuery中获取表的行索引
- 使用jquery将mysql数据获取到新的表行中
- 在动态创建的元素上获取对特定选择器的引用
- 从城市名称获取惊喜
- Angular只从数组中获取所需的数据
- 无法将数据从firebase获取到我的html页面
- 从ajax请求中获取javascript对象
- 如何从画布上的某个移动事件中获取X和Y
- 是否有一个JS/jQuery函数可以获取某个类的每个元素的ID
- 如何在PHP中使用$_POST获取Select元素值
- 从Enum中获取字符串以形成Laravel 5.3
- 在Typescript中获取Enum的类名
- 可以从对应的整数值中获取字符串值-类似Enum但不是Enum -用于查找
- 正在为传递的值获取相应的eNum密钥