如何定义TupleToUnion类型以提取元组属性值的联合类型?
实现TupleToUnion泛型提取元组属性值的联合类型
给定如下TypeScript类型定义:
type A = [{a: 1}, {a: 'x'}] type TupleToUnion<T, K> = ... TupleToUnion<A, 'a'> // 期望得到类型 `1 | 'x'`
需要定义泛型TupleToUnion<T, K>,实现从元组T的每个元素中提取指定属性K的值,最终组成对应的联合类型。
解决方案
利用TypeScript索引类型与联合类型的特性,可直接实现需求:
type TupleToUnion<T extends any[], K extends keyof T[number]> = T[number][K]
代码说明
T extends any[]:约束泛型参数T为数组/元组类型K extends keyof T[number]:确保K是元组元素的有效属性名,避免传入不存在的键导致类型错误T[number]:获取元组所有元素的联合类型,比如对示例中的A,该值为{a:1} | {a:'x'}T[number][K]:提取联合类型中属性K的类型,自动合并为联合类型,最终得到1 | 'x'
验证示例
type A = [{a: 1}, {a: 'x'}] type Result = TupleToUnion<A, 'a'> // 类型为 1 | 'x',符合预期 // 扩展测试:元组元素包含其他属性时依然有效 type B = [{a: 1, b: 'foo'}, {a: 'x', c: true}] type ResultB = TupleToUnion<B, 'a'> // 类型为 1 | 'x'
内容的提问来源于stack exchange,提问作者sun0day
相关产品推荐
相关产品推荐

