Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Reduce():Type';编号';不可分配给类型';项目';_Javascript_Arrays_Reactjs_Typescript_Error Handling - Fatal编程技术网

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
);