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

TypeScript实现对象数组转强类型Map的泛型类型定义问题

问题原因与解决方案

1. TProperty推导为never的原因

你的泛型参数声明顺序和约束逻辑存在问题:你先声明了TObject extends {},又声明TArray extends TObject[],TypeScript的泛型推导优先级会先尝试匹配最顶层的泛型约束,此时TObject没有足够的输入推导具体类型,会被fallback到最宽泛的{}空对象类型,keyof {}本身就是never类型,因此继承了keyof TObject约束的TProperty自然就被推导为never。

2. 获取属性值类型的方法

你混淆了类型参数和值的用法:typeof操作符只能用于值来获取其类型,TProperty是泛型类型参数,本身就是类型,不能用typeof操作。要获取TObject对应属性的类型,直接用TypeScript的索引访问类型语法TObject[TProperty]即可。


修正后的类型定义

function convertArrayToMap<TObject extends object, TProperty extends keyof TObject>(
  inputArray: TObject[],
  property: TProperty
): Map<TObject[TProperty], TObject> {
  // 此处可补充你的实现逻辑
}

验证效果

调用示例代码时类型推导完全符合预期:

const myArray = [{
   a: 'test',
   b: 1
}, {
   a: 'test1',
   b: 2
}];
const map = convertArrayToMap(myArray, 'a'); 
// map的类型自动推导为 Map<string, { a: string, b: number }>
console.log(map.get('test').b); // 类型检查正常无报错,运行输出1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:24:05