Javascript 如何使用typescript通过名称作为变量引用枚举

Javascript 如何使用typescript通过名称作为变量引用枚举,javascript,angular,typescript,enums,Javascript,Angular,Typescript,Enums,例如,我想从枚举定义中提取一个对象数组 Object.keys(HelloWorldEnum).map(el => { return { label: HelloWorldEnum[el], value: el }; }); enum HelloWorldEnum { option1 = 'Option1', option2 = 'Option2', option3 = 'Option3' } 现在,我如何处理将“HelloWorld”作为变量传递

例如,我想从枚举定义中提取一个对象数组

Object.keys(HelloWorldEnum).map(el => {
  return {
    label: HelloWorldEnum[el],
    value: el
  };
});


enum HelloWorldEnum {
  option1 = 'Option1',
  option2 = 'Option2',
  option3 = 'Option3'
}
现在,我如何处理将“HelloWorld”作为变量传递的函数,下面是不可行的:

getOptions(str) {
    return Object.keys([str + 'Enum']).map(el => {
      return {
        label: [str + 'Enum'][el],
        value: el
      };
    });
  }
甚至我更改为
窗口[str+'Enum']
,或者
此[str+'Enum']
,因为枚举定义既不存在于窗口中,也不存在于此命名空间中


假设上述代码位于任何一个角度组件中

类型脚本将最终将枚举定义转换为如下内容:

如你所见。它只是局部范围内的变量名。它不会添加到全局窗口对象或任何其他对象

在javascript中,只有一种方法可以通过变量的名称访问变量,不建议使用该方法。。。这是通过使用
eval()
实现的,这被认为是一种危险的api,仅使用它就可能导致javascript引擎出现性能问题

把警告放在一边。下面是一个人如何按照你的要求去做

var HelloWorldEnum={};
HelloWorldEnum[“option1”]=“option1”;
HelloWorldEnum[“option2”]=“option2”;
HelloWorldEnum[“option3”]=“option3”;
函数getVariableFromScope(variable){return eval(variable);}
函数getOptions(名称){
const_enum=getVariableFromScope(`${name}enum`);
返回Object.keys(_enum).map(el=>({label:_enum[el],value:el}));
};

log(getOptions('HelloWorld')Typescript将最终将枚举定义转换为如下内容:

如你所见。它只是局部范围内的变量名。它不会添加到全局窗口对象或任何其他对象

在javascript中,只有一种方法可以通过变量的名称访问变量,不建议使用该方法。。。这是通过使用
eval()
实现的,这被认为是一种危险的api,仅使用它就可能导致javascript引擎出现性能问题

把警告放在一边。下面是一个人如何按照你的要求去做

var HelloWorldEnum={};
HelloWorldEnum[“option1”]=“option1”;
HelloWorldEnum[“option2”]=“option2”;
HelloWorldEnum[“option3”]=“option3”;
函数getVariableFromScope(variable){return eval(variable);}
函数getOptions(名称){
const_enum=getVariableFromScope(`${name}enum`);
返回Object.keys(_enum).map(el=>({label:_enum[el],value:el}));
};

log(getOptions('HelloWorld')是否需要枚举?有更好的方法来解决这个问题?可能的重复。这里的简短回答是,您不应该试图通过表示变量名称的字符串来访问变量。相反,您应该维护字符串名称到变量内容(也称为对象)的映射。。。e、 例如,
const enums={HelloWorld:HelloWorldEnum}然后
enums[str]
。是否需要枚举?有更好的方法来解决这个问题?可能的重复。这里的简短回答是,您不应该试图通过表示变量名称的字符串来访问变量。相反,您应该维护字符串名称到变量内容(也称为对象)的映射。。。e、 例如,
const enums={HelloWorld:HelloWorldEnum}然后
枚举[str]
var HelloWorldEnum = {};
HelloWorldEnum["option1"] = "Option1";
HelloWorldEnum["option2"] = "Option2";
HelloWorldEnum["option3"] = "Option3";