export enum MyEnum{
Option1,
Option2,
Option3
}
string x = 'Option1';
MyEnum[x]
会抛出错误:
然而类型字符串不能分配给MyEnum
类型
:
MyEnum['Option1']
有效。
我需要使用MyEnum[x]
(在一个返回MyEnum的方法中),其中x是一个计算值,导致一个有效的枚举选项,我该怎么办呢?
答案 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];