例如,我想从枚举定义中提取对象数组。
atom['Na']
现在,如何使用下面将'HelloWorld'作为变量传递的函数呢?
Object.keys(HelloWorldEnum).map(el => {
return {
label: HelloWorldEnum[el],
value: el
};
});
enum HelloWorldEnum {
option1 = 'Option1',
option2 = 'Option2',
option3 = 'Option3'
}
即使我更改为getOptions(str) {
return Object.keys([str + 'Enum']).map(el => {
return {
label: [str + 'Enum'][el],
value: el
};
});
}
或window[str + 'Enum']
,由于窗口和此命名空间
假设上面的代码在 Angular组件
中答案 0 :(得分:0)
Typescript最终会将您的枚举定义转换为如下形式:
var HelloWorldEnum = {};
HelloWorldEnum["option1"] = "Option1";
HelloWorldEnum["option2"] = "Option2";
HelloWorldEnum["option3"] = "Option3";
如您所见。它只是本地范围内的变量名。不会将其添加到全局窗口对象或任何其他对象中。
只有一种方法可以通过javascript中的变量名来访问变量,因此不建议使用 ...这是通过使用eval()
来进行的,它被认为是危险的api,可能会导致性能下降仅仅通过使用它就可以在您的JavaScript引擎中出现问题。
除了警告。这是您可能会做的事情。
var HelloWorldEnum = {};
HelloWorldEnum["option1"] = "Option1";
HelloWorldEnum["option2"] = "Option2";
HelloWorldEnum["option3"] = "Option3";
function getVariableFromScope(variable) { return eval(variable); }
function getOptions(name) {
const _enum = getVariableFromScope(`${name}Enum`);
return Object.keys(_enum).map(el => ({ label: _enum[el], value: el }));
};
console.log(getOptions('HelloWorld'));
最终,我认为您应该探索解决根本问题的其他方法。