我有一个Product
的数组
Product
类:
class Product {
id: string;
type: string;
price: number;
constructor(id: string, type: string, price: number) {
this.id = id;
this.type = type;
this.price = price;
}
}
我尝试通过使用数组reduce函数将product数组按其type
属性分组:
const groupedProducts = productList.reduce((group, prod) => {
const prodType = prod.type;
group[prodType] = group[prodType] ?? [];
group[prodType].push(prod);
return group;
}, {});
上面的代码编译错误:
No index signature with a parameter of type 'string' was found on type '{}'.
我看到这是因为初始值{}
没有对象索引的显式类型,所以我将初始值部分从{}
重构为{string: Product[]}
。但这没有用。
完整的代码在这里
我怎样才能摆脱这个错误&获得分组产品的结果?
正确的方法可能是显式指定reduce
的泛型类型。
const groupedProducts = productList.reduce<Record<string, Product[]>>((group, prod) => {
const prodType = prod.type;
group[prodType] = group[prodType] ?? [];
group[prodType].push(prod);
return group;
}, {});
正确地将group
参数类型和返回类型设置为Record<string, Product[]>
。