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

如何基于另一类型的键创建接口值的联合类型?

实现基于指定键的MyInterface值联合类型

我们可以利用TypeScript的泛型与类型索引特性,实现你需要的CombinedModel类型工具,具体代码与说明如下:

完整实现代码

enum Enum {
  Val1, Val2, Val3
}
interface MyInterface {
  [Enum.Val1]: { bookingId: string }
  [Enum.Val2]: { videoId: string }
  [Enum.Val3]: { userId: string }
}

const EVENT_TASK_MODEL = {
  A: {
    a: [Enum.Val1, Enum.Val2],
  },
  B: {
    c: [Enum.Val2, Enum.Val3]
  }
} as const

// 定义类型工具CombinedModel
type CombinedModel<K1 extends keyof typeof EVENT_TASK_MODEL, K2 extends keyof typeof EVENT_TASK_MODEL[K1]> = 
  MyInterface[typeof EVENT_TASK_MODEL[K1][K2][number]]

// 测试验证
type TestA = CombinedModel<"A", "a"> 
// 结果:{ bookingId: string } | { videoId: string }

type TestB = CombinedModel<"B", "c">
// 结果:{ videoId: string } | { userId: string }

关键逻辑说明

  1. 泛型约束:
    • K1 extends keyof typeof EVENT_TASK_MODEL:限制第一个泛型参数必须是EVENT_TASK_MODEL的第一层键(即"A"或"B")
    • K2 extends keyof typeof EVENT_TASK_MODEL[K1]:限制第二个泛型参数必须是对应第一层键下的第二层子键(比如"A"下的"a")
  2. 提取数组元素类型:typeof EVENT_TASK_MODEL[K1][K2][number]会从目标数组中提取所有枚举成员的联合类型(比如Enum.Val1 | Enum.Val2)
  3. 生成类型联合:用上述枚举联合类型索引MyInterface,自动得到对应值类型的联合结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:50:37