Javascript Reduce():Type';编号';不可分配给类型';项目';
我一直在尝试使用Javascript Reduce():Type';编号';不可分配给类型';项目';,javascript,arrays,reactjs,typescript,error-handling,Javascript,Arrays,Reactjs,Typescript,Error Handling,我一直在尝试使用reduce()方法加上typescript来获取项目的总数,我得到了以下错误: 类型为“(累加器:项,当前值:项)=>number”的参数不可分配给类型为“(前一个值:项,当前值:项,当前索引:数,数组:项[])=>Item”的参数。 类型“编号”不可分配给类型“项目”。 我的代码: export type Item = { id: string; selected: boolean; label: string; numberOfItems: number;
reduce()
方法加上typescript来获取项目的总数,我得到了以下错误:
类型为“(累加器:项,当前值:项)=>number”的参数不可分配给类型为“(前一个值:项,当前值:项,当前索引:数,数组:项[])=>Item”的参数。
类型“编号”不可分配给类型“项目”。
我的代码:
export type Item = {
id: string;
selected: boolean;
label: string;
numberOfItems: number;
};
有人能解决这个错误吗?谢谢:)
累加器的类型是项目
,但您正在返回编号
。将第一个参数类型更改为number
,并将初始值设置为0
const totalItems = items.reduce(
(totalNum: number, currentValue: Item) => totalNum + currentValue.numberOfItems,
0
);
要了解reduce
方法的工作原理,它需要两个参数,一个reducer函数和一个初始值,它将为数组中的每个项运行函数并更新累加器
在您的案例中,两个参数是:
- 如果使用减速机方法,它将向累加器添加
currentValue.numberOfItems
- 累加器的初始值为0
这与写作是一样的:
const totalItems = items.reduce(
(accumulator: number, currentValue: Item) =>
accumulator + currentValue.numberOfItems,
0
);
错误消息中的最后一句话透露了这一点:类型“number”不可分配给类型“Item”。
,这是reducer函数中的累加器类型。因为您要减少到一个数字,而累加器是Item?您没有返回您声明的累加器
类型为项
的累加器。但是返回类型为number
的accumulator.numberOfItems+currentValue.numberOfItems
。返回值是要传递给累加器的值。错误消息说这没有意义。但事实并非如此。您可能只需要累加器:number
并传递初始值0
@VLAZ谢谢您的解释!这真的很有帮助:)就是这样!非常非常感谢!
const reducer = (accumulator: number, currentValue: Item) =>
accumulator + currentValue.numberOfItems;
const initialValue = 0;
const totalItems = items.reduce(reducer, initialValue);
const totalItems = items.reduce(
(accumulator: number, currentValue: Item) =>
accumulator + currentValue.numberOfItems,
0
);