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

如何编写实现数组到对象一对一转换的TypeScript泛型类型

正确泛型实现

type Data = readonly (readonly [number, string])[]

type TransArrayToObject = <TD extends Data>(
  data: TD,
) => {
  // 遍历数组的每一项,将第二项作为键,第一项作为对应值
  readonly [Item in TD[number] as Item[1]]: Item[0]
}

// 配套运行时实现参考
const transArrayToObject = ((data: Data) => {
  return Object.fromEntries(data.map(([value, key]) => [key, value]))
}) as TransArrayToObject

调用你给出的测试用例后,就能得到预期的类型结果:

const result = transArrayToObject([
  [1, 'A'],
  [2, 'B'],
] as const)
// result类型为 { readonly A: 1; readonly B: 2 }

原写法错误原因

你之前的写法中,[K in TD[number][1]]会先提取所有子元素的第二项组成联合类型 'A' | 'B' 作为对象键,而每个键对应的值TD[number][0]是所有子元素第一项的联合类型 1 | 2,没有把键和对应子元素的第一项做绑定,因此所有属性的类型都变成了联合类型。

新写法直接遍历数组的每个子元素,通过as Item[1]将当前子元素的第二项映射为对象键,对应的值直接取当前子元素的第一项,自然就实现了一一对应的映射关系。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:06:05