解决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的类型,再给数组指定该类型:
- 先定义Food接口(根据你的实际业务调整属性):
export interface Food { id: number; name: string; price: number; // 其他你需要的属性 }
- 修改
CartItem类中的food类型:
export class CartItem { quantity = 1; food: Food; // 替换any为Food类型 constructor(food: Food) { this.food = food; } }
- 最后给
model.foods指定为Food[]类型:
export class CartComponent implements OnInit { model = { Name: '', State: '', foods: [] as Food[] // 指定为Food类型数组 }; // 剩余代码不变 }
这样做后,TypeScript会对数组中的元素提供类型检查,避免后续出现类型不匹配的问题。
内容的提问来源于stack exchange,提问作者alexmntmnk
相关产品推荐
相关产品推荐

