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

如何将两个TypeScript元组转换为指定键值对类型?

解决TypeScript元组转对应键值对象的问题

你可以用TypeScript 4.1及以上版本支持的键重映射特性来实现需求,核心是在映射类型里通过as关键字把原来的数字索引替换成names元组里的对应元素作为对象键:

type names = ['a', 'b', 'c'];
type types = [number, string, number];

// 通用类型:将两个同长度元组转为键值对应对象
type TupleToObject<KeyTuple extends PropertyKey[], ValueTuple extends unknown[]> = {
  [K in keyof KeyTuple as KeyTuple[K]]: ValueTuple[K & keyof ValueTuple]
};

// 生成目标类型
type returnType = TupleToObject<names, types>;
// 结果:{a: number, b: string, c: number}

关键逻辑说明:

  • keyof KeyTuple会获取元组的数字索引类型(比如这里的'0' | '1' | '2')。
  • as KeyTuple[K]是键重映射的核心,把遍历到的数字索引替换成KeyTuple对应位置的元素,作为最终对象的键名。
  • ValueTuple[K & keyof ValueTuple]用来取ValueTuple中相同索引位置的类型,作为对应键的值类型(& keyof ValueTuple是为了消除类型检查的潜在警告,因为两个元组长度一致,实际索引必然匹配)。

如果只针对当前的元组场景,也可以直接写简化的映射:

type returnType = {
  [K in keyof names as names[K]]: types[K]
};

内容的提问来源于stack exchange,提问作者Anon A. Mouse

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 21:12:09