问题描述: 尝试添加键以减少对象时,Typescript groupBy“无法用于索引类型'{}'”
回答: 在 TypeScript 中,当我们尝试使用 groupBy 函数对对象进行分组时,可能会遇到 "无法用于索引类型'{}'" 的错误。这个错误通常是由于 TypeScript 无法推断出对象的键类型而导致的。
解决这个问题的方法是明确指定对象的键类型。我们可以使用 TypeScript 的泛型来实现这一点。以下是解决该问题的示例代码:
function groupBy<T, K extends keyof T>(array: T[], key: K): Record<T[K], T[]> {
return array.reduce((result, item) => {
const keyValue = item[key];
if (!result[keyValue]) {
result[keyValue] = [];
}
result[keyValue].push(item);
return result;
}, {} as Record<T[K], T[]>);
}
// 示例用法
interface Person {
name: string;
age: number;
}
const people: Person[] = [
{ name: 'Alice', age: 25 },
{ name: 'Bob', age: 30 },
{ name: 'Alice', age: 35 },
];
const groupedPeople = groupBy(people, 'name');
console.log(groupedPeople);
在上述示例中,我们定义了一个泛型函数 groupBy
,它接受一个数组和一个键名作为参数,并返回一个以键值为索引的对象。通过使用 keyof T
来限制键的类型,我们可以确保传入的键名是对象类型 T
中存在的属性。
在示例中,我们定义了一个 Person
接口来表示人员对象,包含 name
和 age
属性。然后我们创建了一个包含多个人员对象的数组 people
。我们调用 groupBy
函数,并传入 people
数组和键名 'name'
,将人员对象按照姓名进行分组。
最后,我们打印输出了分组后的结果 groupedPeople
,可以看到输出的对象以姓名作为键,对应的人员对象数组作为值。
推荐的腾讯云相关产品和产品介绍链接地址:
请注意,以上推荐的腾讯云产品仅供参考,具体选择应根据实际需求进行评估和决策。
领取专属 10元无门槛券
手把手带您无忧上云