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

ann*_*pic 14 enums typescript

export enum MyEnum{
    Option1,
    Option2,
    Option3
}


string x = 'Option1';
Run Code Online (Sandbox Code Playgroud)

MyEnum[x] 抛出错误:

类型字符串不可分配给类型 MyEnum

然而: MyEnum['Option1']作品。

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

Son*_*yen 28

有两种优雅的方法可以实现这一目标

??第一种方法:只需关闭下一行的类型检查,这类似于在@annepic 的回答中将 MyEnum 的类型断言为 <any>

// @ts-ignore 
MyEnum[x] 
Run Code Online (Sandbox Code Playgroud)

?? 第二:如果你还想保留TS强大的类型检查功能,选择这个

MyEnum[x as keyof typeof MyEnum] 
Run Code Online (Sandbox Code Playgroud)

typeof MyEnum将创建一个interface代表MyEnum幕后对象的 ,keyof并将返回字符串文字的联合,每个字符串都是MyEnum对象中的键(换句话说,keyof将返回特定对象的键列表)。

  • 感谢您实际解释“keyof typeof”正在做什么!:) (6认同)
  • 喜欢“keyof typeof”组合 (2认同)

ann*_*pic 5

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

  • 常量键 = 计算键();return Object(MyEnum)[key];为我工作 (6认同)

Pok*_*oku 4

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

export enum MyEnum{
    Option1,
    Option2,
    Option3
}


var x = 'Option1';
MyEnum[x];
Run Code Online (Sandbox Code Playgroud)