按键动态访问打字稿中的枚举

时间:2018-05-18 18:27:41

标签: typescript enums

export enum MyEnum{
    Option1,
    Option2,
    Option3
}


string x = 'Option1';

MyEnum[x]会抛出错误:

  

类型字符串不能分配给MyEnum

类型
然而

MyEnum['Option1']有效。

我需要使用MyEnum[x](在一个返回MyEnum的方法中),其中x是一个计算值,导致一个有效的枚举选项,我该怎么办呢?

4 个答案:

答案 0 :(得分:19)

有两种优雅的方法可以实现这一点?

⭐️第一种方式:只需关闭下一行的类型检查,这类似于在@annepic 的答案中将 MyEnum 的类型断言为

// @ts-ignore 
MyEnum[x] 

⭐️2nd:如果你还想保留TS强大的类型检查功能,选择这个

MyEnum[x as keyof typeof MyEnum] 

typeof MyEnum 将创建一个接口,代表幕后的 MyEnum 对象,keyof 将返回一个文字联合,每个文字都是 MyEnum 对象中的键。

答案 1 :(得分:2)

您声明字符串x变量错误。你应该这样做:

export enum MyEnum{
    Option1,
    Option2,
    Option3
}


var x = 'Option1';
MyEnum[x];

答案 2 :(得分:2)

我认为您正在寻找的是在枚举中明确键入所选项目作为该枚举。示例:

export enum MyEnum{
  Option1,
  Option2,
  Option3
}

function getEnum(x = 'Option1'):MyEnum {
  return <MyEnum>MyEnum[x];
}

您引用的“类型字符串无法分配给MyEnum类型”错误实际上是由于函数返回类型与您的枚举不匹配而引起的。其他一些解决方案将枚举转换为对象,但是与具有相同枚举的返回类型的函数不兼容。

答案 3 :(得分:0)

让它像这样工作:return (<any>MyEnum)[x];