如何在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];
代码解释
- 映射类型生成绑定元组:通过
{ [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']
- 当
- 取元组类型的联合:通过
[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
相关产品推荐
相关产品推荐

