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

TypeScript如何根据Enum枚举值实现泛型属性的类型推断

TypeScript 枚举成员映射对应属性类型实现

基础实现(条件类型分支)

枚举项数量较少时,可以直接用条件类型做分支判断,匹配不同枚举成员对应的类型:

enum Foo {
  One,
  Two
}

// 业务自定义类型
type Bar = { commonField: string }
type BarOne = Bar & { oneField: number }
type BarTwo = Bar & { twoField: boolean }

export type MyType<T extends Foo> = {
  data: T extends Foo.One ? BarOne : T extends Foo.Two ? BarTwo : never
}

使用时类型会自动匹配:

// 类型校验通过
const demo1: MyType<Foo.One> = {
  data: {
    commonField: "demo",
    oneField: 123
  }
}

const demo2: MyType<Foo.Two> = {
  data: {
    commonField: "demo",
    twoField: true
  }
}

更优可扩展方案(映射表索引)

如果枚举项较多、后续可能新增枚举成员,嵌套条件类型维护成本高,推荐先建立枚举成员到目标类型的映射表,通过索引访问类型直接取值,扩展性更强:

// 统一维护枚举和对应类型的映射关系,新增枚举只需要在这里加配置
type FooTypeMap = {
  [Foo.One]: BarOne
  [Foo.Two]: BarTwo
}

export type MyType<T extends Foo> = {
  data: FooTypeMap[T]
}

这个方案是类型安全的,如果新增枚举成员后忘记在映射表加对应类型,TS会直接抛出类型错误,避免漏配问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:09:28