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

TypeScript中如何将键值对元组转换为值组成的元组

实现ValuesFromPairs泛型工具类型

利用TypeScript对元组类型的同态映射特性即可实现——TS在遍历元组做映射时,会自动保留元组的长度和元素顺序,不会退化为普通数组联合类型,完整实现代码如下:

type ValuesFromPairs<T extends readonly { k: unknown }[]> = {
  [Index in keyof T]: T[Index] extends { k: infer Value } ? Value : never
}

实现逻辑说明

  • 首先给泛型参数T加类型约束:必须是元素带k属性的只读数组/元组,同时兼容可变元组、只读元组两种传入场景。
  • 遍历元组的所有索引位:TS会自动跳过length、数组原型方法这类非元素索引的键,保证返回结果和输入元组长度一致、元素位置一一对应。
  • 对每个索引位的元素,用条件类型的infer关键字推断出k属性对应的值类型,作为新元组同位置的类型。

效果验证

用示例代码测试可以得到完全符合预期的结果:

type PairsTuple = [{ k: 1 }, { k: 2 }, { k: 3 }]
type ValuesTuple = ValuesFromPairs<PairsTuple>
// 类型计算结果为 [1, 2, 3]

该实现也兼容边界场景:传入空元组[]时返回类型为[],传入只读元组时也可以正常提取值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 07:24:37