如何解决错误“ void”类型不能分配给角类型“ boolean”?

时间:2020-03-03 12:11:13

标签: angular

我正在使用以下代码,并得到如下错误:

错误: 错误TS2345:类型'(item:any)=> void'的参数不能分配给类型'(value:any,index:number,obj:any [])=> boolean'的参数。 不能将“ void”类型分配给“ boolean”类型。

代码:

addToCart(product) {
    if (!this.productArr.length) {
      this.productArr.push(product);
    } else {
      let flag = false;
      this.productArr.find((item: any) => {
        if (item.name === product.name) {
          item.count = product.count;
          flag = true;
        }
      });
      if (!flag) {
        this.productArr.push(product);
      }
    }
    this.cartService.addToCart(this.productArr);
  }

任何想法我们如何解决?

3 个答案:

答案 0 :(得分:0)

regexp

addToCart(product) { if (!this.productArr.length) { this.productArr.push(product); } else { let flag = false; this.productArr.forEach((item: any) => { // change this line if (item.name === product.name) { item.count = product.count; flag = true; } }); if (!flag) { this.productArr.push(product); } } this.cartService.addToCart(this.productArr); } 更改为.find.forEach会在找到所需元素时返回布尔值。 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find

答案 1 :(得分:0)

您没有在作为参数传递给find的箭头函数中返回任何值。您需要在此处返回布尔值。

this.productArr.find((item: any) => {
    if (item.name === product.name) {
        item.count = product.count;
        flag = true;
        return true;
    }
    return false;
});

请注意,这也将停止在数组上进行进一步的迭代,这可能是您可能没有做的。如果您需要查找所有forEach出现的名称与产品名称相同的地方,请使用item

更好的解决方案是使用someevery而不是find,这取决于您是否要将此操作应用于多个产品,因为使用find意味着您正在寻找某些东西,而不是对商品进行更改。

// Will stop after the first time `true` is returned
this.productArr.some((item: any) => {
    if (item.name === product.name) {
        item.count = product.count;
        flag = true;
        return true;
    }
});

答案 2 :(得分:0)

那:

addToCart(product: any): void {
    // find will return your product, and it only need a boolean as condition for the arrow function
    const product = this.productArr.find((item: any) => item.name === product.name);

    // If you don't have some products or you don't find your product, you push it
    if (!this.productArr.length || !product) {
      this.productArr.push(product);
    }

    // if you find your product, you update your item.coun
    if (product) {
        item.count = product.count;
    }

    this.cartService.addToCart(this.productArr);
}

看看这个article,它实际上说明了如何查找/映射/ foreach运算符。