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

如何在TypeScript中实现对象键与对应子数组元素的类型关联?

如何在TypeScript中定义键与对应值绑定的元组类型

你当前的Levels类型将所有一级键和所有二级值做了无关联的组合,导致不同键对应的二级值可以随意搭配,无法达到键值绑定的校验效果。要解决这个问题,需要让元组的两个元素类型关联绑定,具体实现如下:

修正后的类型定义

const obj = {
    a: [
        'hi',
        'hello'
    ] as const,
    b: [
        'see you',
        'good bye'
    ] as const
}

// 生成每个键对应的合法元组,再取联合类型
type Levels = {
  [K in keyof typeof obj]: [K, typeof obj[K][number]]
}[keyof typeof obj];

代码解释

  1. 映射类型生成绑定元组:通过{ [K in keyof typeof obj]: [K, typeof obj[K][number]] }遍历obj的所有键K,为每个键生成对应的元组类型——第一个元素是键K本身,第二个元素是该键对应数组的元素联合类型。比如:
    • 当K为'a'时,元组类型是['a', 'hi' | 'hello']
    • 当K为'b'时,元组类型是['b', 'see you' | 'good bye']
  2. 取元组类型的联合:通过[keyof typeof obj]提取映射类型的所有值,最终Levels就是所有合法元组类型的联合,即['a', 'hi' | 'hello'] | ['b', 'see you' | 'good bye']。

测试验证

const a: Levels = ['a', 'hi']; // 合法,符合预期
const b: Levels = ['a', 'see you']; // 类型报错,符合预期('a'不对应'see you')
const c: Levels = ['b', 'good bye']; // 合法,符合预期
const d: Levels = ['b', 'hello']; // 类型报错,符合预期('b'不对应'hello')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 11:55:19