You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 11:55:58