如何在Typescript中将字符串转换为枚举类型

23 浏览
0 Comments

如何在Typescript中将字符串转换为枚举类型

枚举定义:\n

enum Colors {
  Red = "red",
  Blue = "blue"
}

\n如何将任意字符串(例如来自GET请求的结果)转换为枚举?\n

const color: Colors = "blue"; // 出现错误

\n此外,为什么整数枚举可以工作,而字符串枚举却无法具有相同的行为?\n

enum Colors {
  Red = 1,
  Blue
}
const color: Colors = 1; // 可行

0
0 Comments

问题的原因:

在TypeScript中,将字符串转换为枚举类型并不是一件直接的事情。当使用整数枚举时,可以直接将字符串转换为枚举类型,但是使用字符串枚举时,需要进行类型转换。

解决方法:

如果确定字符串始终对应枚举中的一个项,可以进行强制类型转换。但是这种方法无法捕获字符串无效的情况,需要在运行时进行检查。

具体做法是使用Object.values(Colors)获取枚举的所有值,然后使用Array的some方法来检查字符串是否与枚举中的某个值相等。如果相等,则进行类型转换,否则抛出异常或设置默认值。

另外,需要注意的是,使用in操作符检查枚举时,它会检查枚举的键而不是值。整数枚举会生成反向映射,但是字符串枚举不会。

此外,有人在进行类型转换时遇到了错误:"JSX element 'Colors' has no corresponding closing tag"。为了解决这个错误,可以尝试使用不同的类型转换方式,例如使用as关键字进行转换。

最后,代码中建议将.some方法更改为.find方法,这样当找到正确的枚举值时,就不会继续迭代枚举的其他值了。

0