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将返回特定对象的键列表)。
您声明字符串 x 变量错误。你应该做这个:
export enum MyEnum{
Option1,
Option2,
Option3
}
var x = 'Option1';
MyEnum[x];
Run Code Online (Sandbox Code Playgroud)