Javascript 获取Typescript中枚举的类名

Javascript 获取Typescript中枚举的类名,javascript,typescript,Javascript,Typescript,我的Typescript应用程序中有一些枚举,我使用类似于此的代码获取要在应用程序中显示的字符串值: enum Color{ RED, BLUE, GREEN}; document.write( "The string for Red is: " + Color[Color.RED] ); 但是,字符串值通常更接近数据库键或其他与服务器相关的字符串,而不是适合显示给用户的格式良好的字符串。 为了解决这个问题,我想加载本地化的属性文件,这些文件使用枚举的字符串值来查找要在应用程序中显示的格式良

我的Typescript应用程序中有一些枚举,我使用类似于此的代码获取要在应用程序中显示的字符串值:

enum Color{ RED, BLUE, GREEN};

document.write( "The string for Red is: " + Color[Color.RED] );
但是,字符串值通常更接近数据库键或其他与服务器相关的字符串,而不是适合显示给用户的格式良好的字符串。 为了解决这个问题,我想加载本地化的属性文件,这些文件使用枚举的字符串值来查找要在应用程序中显示的格式良好的字符串。该文件可能如下所示:

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 = {}));

我不认为我能以任何简单的方式从中获得字符串的颜色。我假设我只需要使用switch表达式来查找文件名。

不,语言中没有内置任何东西允许您在运行时获取枚举名

但是,我使用了以下方法:

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-
颜色来进行映射可能更容易

话虽如此

有没有办法从运行时javascript对颜色的定义中获取字符串“Color”

一个可靠的解决方案是使用类似的方法

或者,您可以使用类似的技巧,如中所述:

这将在函数中包装颜色,然后对该函数调用
.toString()
。使用该字符串,它将仅提取提供的名称

只要确保在缩小尺寸后进行测试,看看是否有效

function getVariableName(variableFunction: () => any) {
    return /\s([^\s;]+);?\s*\}$/.exec(variableFunction.toString())[1];
}

var variableName = getVariableName(() => Color); // returns string "Color"