在 TypeScript 中将字符串转换为枚举

在 TypeScript 中将字符串转换为枚举

Convert a String to Enum in TypeScript

将字符串转换为枚举:

  1. 用于keyof typeof将字符串转换为枚举类型。
  2. 使用括号表示法访问枚举中字符串的相应值。
索引.tsx
enum EmailStatus { Read, Unread, Draft, } // 👇️ String to enum const str: keyof typeof EmailStatus = 'Read'; console.log(EmailStatus[str]); // 👉️ 0 const enumToStr = EmailStatus[EmailStatus.Read]; console.log(enumToStr); // 👉️ "Read"

使用
keyof typeof
允许我们获得一个将所有 Enum 键表示为字符串的类型。

索引.tsx
enum EmailStatus { Read, Unread, Draft, } // 👇️ type T = "Read" | "Unread" | "Draft" type T = keyof typeof EmailStatus;

如果我们将字符串的类型设置为枚举的可能类型之一,如果不匹配,我们将得到一个错误。

索引.tsx
enum EmailStatus { Read, Unread, Draft, } // ⛔️ Error: Type "Test" is not assignable to type "Read" | "Unread" | "Draft" const str2: keyof typeof EmailStatus = 'Test'; console.log(EmailStatus[str2]); // 👉️ undefined

您可以使用括号表示法访问与枚举中的字符串对应的值。

索引.tsx
enum EmailStatus { Read, Unread, Draft, } // // ⛔️ Error: Type "Test" is not assignable to type "Read" | "Unread" | "Draft" const str2: keyof typeof EmailStatus = 'Read'; console.log(EmailStatus[str2]); // 👉️ 0

另一种方法是断言存储字符串的变量的类型为Enum.

索引.tsx
enum EmailStatus { Read, Unread, Draft, } const str = 'Read'; const strEnum = str as unknown as EmailStatus; console.log(EmailStatus[strEnum]); // 👉️ 0

在上面的例子中,我们断言str变量存储了一个类型为EmailStatus.

这种方法不如 using 干净keyof typeof,应尽可能避免使用,因为它不能防止错误值。

您可以将任何字符串转换为具有值EmailStatus而不会出现错误。

索引.tsx
enum EmailStatus { Read, Unread, Draft, } const str = 'Test'; const strEnum = str as unknown as EmailStatus; console.log(EmailStatus[strEnum]); // 👉️ undefined

使用时情况并非如此keyof typeof

索引.tsx
enum EmailStatus { Read, Unread, Draft, } // ⛔️ Error: Type "Test" is not assignable to type "Read" | "Unread" | "Draft" const str: keyof typeof EmailStatus = 'Test';

TypeScript 足够聪明,可以注意到它Test不是枚举中的键之一,并在输入错误时显示错误。

发表评论