乐闻世界logo
搜索文章和话题

Typescript 如何将字符串转换为 enum ?

7 个月前提问
3 个月前修改
浏览次数144

6个答案

1
2
3
4
5
6

在 TypeScript 中,枚举(enum)是一种特殊的类型,它可以帮助我们以更结构化的方式处理一组相关的常数值。如果你需要将字符串转换为 enum 类型,通常是因为你从外部源(比如 API 或用户输入)接收到了一个字符串,而你想将这个字符串映射到一个已定义的 enum 中。

下面是一个具体的例子来说明如何将字符串转换为 enum:

1. 定义 Enum

首先,我们定义一个 enum 类型,例如:

typescript
enum Color { Red = "RED", Green = "GREEN", Blue = "BLUE" }

2. 转换函数

接着,我们可以编写一个函数来将字符串转换为 enum 类型。该函数会检查输入字符串是否为 enum 的有效键:

typescript
function convertStringToEnum(value: string, enumType: any): any { if (value in enumType) { return enumType[value as keyof typeof enumType]; } else { throw new Error("Invalid enum value"); } }

3. 使用转换函数

现在我们可以使用这个函数来转换字符串为 enum:

typescript
try { const color: Color = convertStringToEnum("RED", Color); console.log(color); // 输出: RED } catch (error) { console.error(error); }

在这个例子中,如果传入的字符串是 "RED"、"GREEN" 或 "BLUE",函数 convertStringToEnum 将会成功返回相应的 enum 值。如果传入的是其他值,它将抛出一个错误。

注意点

  • 确保传入的字符串完全匹配 enum 中的键(在这个例子中是大写的 "RED", "GREEN", "BLUE"),包括大小写。
  • 在处理从外部接口或用户输入中获得的数据时,你应该总是准备好处理无效或异常的值。

通过这种方式,你可以将字符串安全地转换为 TypeScript 中的 enum 类型,确保类型的准确性和代码的健壮性。

2024年6月29日 12:07 回复

TypeScript 0.9 中的枚举是基于字符串+数字的。您不应该需要类型断言来进行简单转换:

shell
enum Color{ Red, Green } // To String var green: string = Color[Color.Green]; // To Enum / number var color : Color = Color[green];

在线尝试一下

我在我的 OSS 书中有关于此和其他枚举模式的文档: https: //basarat.gitbook.io/typescript/type-system/enums

如果您使用 typescript 标志,请确保使用此标志--noImplicitAny

shell
var color : Color = Color[green as keyof typeof Color];
2024年6月29日 12:07 回复

从 Typescript 2.1 开始,枚举中的字符串键是强类型的。keyof typeof用于获取有关可用字符串键的信息 ( 1 ):

shell
enum Color{ Red, Green } let typedColor: Color = Color.Green; let typedColorString: keyof typeof Color = "Green"; // Error "Black is not assignable ..." (indexing using Color["Black"] will return undefined runtime) typedColorString = "Black"; // Error "Type 'string' is not assignable ..." (indexing works runtime) let letColorString = "Red"; typedColorString = letColorString; // Works fine typedColorString = "Red"; // Works fine const constColorString = "Red"; typedColorString = constColorString // Works fine (thanks @SergeyT) let letColorString = "Red"; typedColorString = letColorString as keyof typeof Color; typedColor = Color[typedColorString];

https://www.typescriptlang.org/docs/handbook/advanced-types.html#index-types

2024年6月29日 12:07 回复

如果您向枚举提供字符串值,则直接转换就可以了。

shell
enum Color { Green = "Green", Red = "Red" } const color = "Green"; const colorEnum = color as Color;
2024年6月29日 12:07 回复

如果您使用打字稿:上面的许多解决方案可能不起作用或过于复杂。

情况:字符串与枚举值不同(大小写不同)

shell
enum Color { Green = "green", Red = "red" }

只需使用:

shell
const color = "green" as Color

请注意,这并不能保证枚举有效。

2024年6月29日 12:07 回复

你的答案