在Array.Reduce上键入错误

时间:2018-05-30 14:52:23

标签: arrays typescript

我似乎无法弄清楚为什么在尝试进行某些对象转换时出现错误。

我要做的是获取一个项目数组并使用Array.Reduce方法根据项目中的字段创建一个新对象。之后我使用Object.entries.map方法创建一个新数组,以便稍后迭代对象。代码如下。

export interface IMenuItem {
    id: string;
    name: string;
    description: string;
    category: string;
    imageUrl: string;
    quantity: number;
}

function toItemGroups(items: IMenuItem[]): [{ items: {}; label: string }] {
    const groups: {} = items.reduce((result, item) => {
        const group: [{}] = result[item.category] || [];
        result[item.category] = group.concat(item);
        return result;
    }, {});

    return Object.entries(groups).map(([label, items]) => ({ items, label }));
}

我得到的错误是:

  

type {items:IMenuItem []; label:string} []不能分配给[{items:{}; label:string}]。

这是非常自我解释但我似乎无法弄清楚我需要什么类型才能正确映射。

任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:3)

它告诉你想要它所期望的类型所以只需在函数声明中使用它:

function toItemGroups(items: IMenuItem[]): { items: IMenuItem[]; label: string }[] {

请注意,您希望类型末尾的[]表示数组。

[{ items: IMenuItem[]; label: string }]意味着元组(或长度为1的数组)

答案 1 :(得分:1)

toItemGroups()的返回类型为[{ items: {}; label: string }],应为{ items: IMenuItem[]; label: string }[]。返回类型中的itemsIMenuItem

的数组