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

为何指定字符串不匹配包含该字符串的枚举类型?

为什么'FOO'不extends字符串枚举MyEnum?

先看你定义的字符串枚举:

enum MyEnum {
  foo = 'FOO',
  bar = 'BAR',
}

核心原因是TypeScript字符串枚举的类型和它的字面量值类型不是一回事:

  • 当你把MyEnum当作类型使用时,它代表的是枚举成员自身的类型(比如MyEnum.foo、MyEnum.bar这种被TypeScript打上特殊标记的类型),而不是这些成员对应的值的字面量类型('FOO'、'BAR')。
  • 简单说:MyEnum类型的取值只能是MyEnum.foo或MyEnum.bar这两个枚举成员,而不是对应的字符串字面量'FOO'或'BAR'。所以'FOO'自然不属于MyEnum类型的子集,extends判断为false。

如果要判断字符串字面量是否属于枚举值的范围,你需要先获取枚举所有值的联合类型,也就是MyEnum[keyof MyEnum]:

type StringIsInEnum = 'FOO' extends MyEnum[keyof MyEnum] ? true : false; // true

这里keyof MyEnum会拿到枚举的所有键('foo'、'bar'),MyEnum[keyof MyEnum]就会取出每个键对应的值的类型,也就是'FOO' | 'BAR',此时'FOO'自然属于这个联合类型的子集,extends判断返回true。

内容的提问来源于stack exchange,提问作者WoodyWoodsta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 19:37:08