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

如何定义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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:50:38