You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决TypeScript报错:Argument of type 'any' is not assignable to parameter of type 'never'

解决TypeScript报错:Argument of type 'any' is not assignable to parameter of type 'never'

你遇到的问题根源确实是model.foods未指定类型,TypeScript会将空数组[]推断为never[](表示这个数组永远不能包含任何元素),所以当你往里面push类型为any的cartItem.food时就会报错。以下是两种解决方式:

方式一:直接指定foods为any类型数组

快速解决的话,可以直接给foods指定类型为any[],告诉TypeScript这个数组可以容纳任意类型的元素:

export class CartComponent implements OnInit {

  model = {
    Name: '',
    State: '',
    foods: [] as any[] // 显式指定类型为any数组
  };

  constructor(private cart: CartService) {}
  ngOnInit() {}
  onSubmit() {
    this.cart.getItemsInCart().forEach(cartItem => {
      this.model.foods.push(cartItem.food);
    });
  }
}

或者也可以写成:

foods: any[] = []

方式二:定义明确的Food类型(推荐)

使用any虽然能解决问题,但会失去TypeScript的类型检查优势。更规范的做法是先定义Food的类型,再给数组指定该类型:

  1. 先定义Food接口(根据你的实际业务调整属性):
export interface Food {
  id: number;
  name: string;
  price: number;
  // 其他你需要的属性
}
  1. 修改CartItem类中的food类型:
export class CartItem {
    quantity = 1; 
    food: Food;  // 替换any为Food类型
    constructor(food: Food) {
      this.food = food;
    }  
}
  1. 最后给model.foods指定为Food[]类型:
export class CartComponent implements OnInit {

  model = {
    Name: '',
    State: '',
    foods: [] as Food[] // 指定为Food类型数组
  };

  // 剩余代码不变
}

这样做后,TypeScript会对数组中的元素提供类型检查,避免后续出现类型不匹配的问题。

内容的提问来源于stack exchange,提问作者alexmntmnk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 14:15:40