TypeScript如何在类型定义中获取枚举类型的值?
TypeScript字符串枚举值联合类型提取问题解析
报错原因
在TypeScript里,枚举类型E和枚举对象的类型typeof E是两个完全不同的概念:
E作为类型,仅代表枚举的所有值的集合(也就是"apple" | "banana" | "cherries");typeof E才是描述编译后生成的枚举对象的类型,它包含A/B/C这些键,对应的值就是枚举的字符串值。
你写E[EnumKey]时,TypeScript会尝试访问枚举类型E的A/B/C属性,但E类型本身根本没有这些属性——这些属性属于typeof E对应的对象类型,因此会抛出错误。
正确实现方式
你已经写出了正确的代码:
enum E { A = "apple", B = "banana", C = "cherries" } type EnumKey = keyof typeof E // 这个类型等价于 EnumValueExpected type EnumValue = (typeof E)[EnumKey]
也可以简化成一行,不用单独定义EnumKey:
type EnumValue = (typeof E)[keyof typeof E]
如果需要复用这种逻辑,还可以封装成通用泛型工具:
type EnumValues<T extends Record<string, string | number>> = T[keyof T] // 使用示例 type EnumValue = EnumValues<typeof E>
以上几种方式得到的EnumValue类型,完全等价于你期望的"apple" | "banana" | "cherries"。
内容的提问来源于stack exchange,提问作者Jin
相关产品推荐
相关产品推荐

