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

如何实现带类型推导的TypeScript属性数组转对象reduce函数

TypeScript 键值对数组转对象的类型自动推导实现

要实现能自动推导目标对象类型的转换函数,核心是利用TypeScript的泛型联合类型和映射类型,精准捕获每个键值对的字面量类型:

完整实现代码

function arrayToObject<T extends { key: string; value: unknown }>(
  arr: readonly T[]
): { [K in T['key']]: Extract<T, { key: K }>['value'] } {
  return arr.reduce((obj, item) => {
    obj[item.key] = item.value;
    return obj;
  }, {} as { [K in T['key']]: Extract<T, { key: K }>['value'] });
}

类型逻辑说明

  1. 泛型约束T:约束输入数组的元素必须包含key(字符串类型)和value(任意类型),当传入具体数组时,TypeScript会自动将T推导为数组所有元素的联合类型,每个元素保留key的字面量类型(比如"key1"而非string)和对应的value类型。
  2. 返回值映射类型:
    • [K in T['key']]遍历T中所有key的字面量类型,作为目标对象的键。
    • Extract<T, { key: K }>从联合类型T中提取出key等于K的元素类型,再取其value类型,实现键与值类型的精准对应。
  3. 初始值类型断言:reduce的初始空对象{}无法自动推导目标类型,因此用as断言为最终返回值类型,避免类型报错。

使用示例

const inputArr = [
  { key: "key1", value: "my string" },
  { key: "key2", value: 123 },
  { key: "key3", value: false }
];

const resultObj = arrayToObject(inputArr);
// 自动推导resultObj的类型为:{ key1: string; key2: number; key3: boolean }

调用函数时无需手动传入泛型参数,TypeScript会根据输入数组自动推导目标对象的具体类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 22:12:13