在 TypeScript 中将枚举转换为联合类型
Convert an Enum to a Union Type in TypeScript
使用模板文字类型将枚举转换为联合类型,例如类型 ValuesUnion = ${StringEnum}
。模板文字类型与模板文字字符串具有相同的语法。联合类型将包含枚举的所有值。
索引.ts
enum StringEnum { Small = 'S', Medium = 'M', Large = 'L', } // 👇️ type ValuesUnion = "S" | "M" | "L" type ValuesUnion = `${StringEnum}`; // 👇️ type KeysUnion = "Small" | "Medium" | "Large" type KeysUnion = keyof typeof StringEnum;
第一个示例使用
模板文字类型
来获取表示枚举值的联合类型。
模板文字类型与JavaScript 中的模板文字字符串具有相同的语法
,但用于类型位置。
索引.ts
type T = 'read'; type D = 'draft'; // 👇️ type AllIDs = "read_id" | "draft_id" type AllIDs = `${T | D}_id`;
第二个示例使用
keyof typeof
将枚举转换为包含枚举键的联合类型。
索引.ts
enum StringEnum { Small = 'S', Medium = 'M', Large = 'L', } // 👇️ type KeysUnion = "Small" | "Medium" | "Large" type KeysUnion = keyof typeof StringEnum;
这两种方法中的任何一种都可以防止我们在写出枚举键或值时出现拼写错误。
索引.ts
enum StringEnum { Small = 'S', Medium = 'M', Large = 'L', } // 👇️ type KeysUnion = "Small" | "Medium" | "Large" type KeysUnion = keyof typeof StringEnum; // ⛔️ Error: Type "Test" is not assignable to type "Small" | "Medium" | "Large" const str: KeysUnion = 'Test';
因为Test
不存在于枚举的键中,所以 TypeScript 会提醒我们有错别字。