按属性对对象数组进行分组时"no explicit type for the object index"



我有一个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[]>

游乐场

相关内容

  • 没有找到相关文章

最新更新