如何解决Angular中TypeScript报错:Property 'item' does not exist on type 'never'
解决TypeScript报错:Property 'item' does not exist on type 'never'
这个报错的核心原因是this.cartProducts的类型被TypeScript推断为never[],再加上event使用any类型导致类型检查失效,以下是具体修复步骤:
1. 定义明确的类型接口
先为购物车项和商品结构定义TypeScript接口,明确数据格式:
// 商品结构,根据实际业务补充其他属性 interface Product { id: number; name?: string; price?: number; } // 购物车项结构(对应你代码里的event结构) interface CartItem { item: Product; // 如果有数量等其他购物车专属属性,可在此添加 }
2. 为cartProducts指定类型注解
在组件类中,给cartProducts明确标注类型并初始化空数组,避免TypeScript自动推断为never[]:
export class YourComponent { cartProducts: CartItem[] = []; // 组件其他代码... }
3. 修正JSON.parse的类型断言与event类型
将event的any类型替换为CartItem,同时给JSON.parse添加类型断言,确保解析后的数据符合预期结构:
addToCart(event: CartItem) { if ("cart" in localStorage) { // 断言解析后的本地存储数据为CartItem数组 this.cartProducts = JSON.parse(localStorage.getItem("cart")!) as CartItem[]; // 检查商品是否已存在于购物车 let exist = this.cartProducts.find(cartItem => cartItem.item.id === event.item.id); if (exist) { alert("This product is already in your cart"); } else { this.cartProducts.push(event); localStorage.setItem("cart", JSON.stringify(this.cartProducts)); } } else { this.cartProducts.push(event); localStorage.setItem("cart", JSON.stringify(this.cartProducts)); } }
修复逻辑说明
- 未指定类型的
cartProducts若初始为空且无明确赋值提示,TypeScript会推断其为never[](表示数组永远无法容纳任何元素),因此访问item.item时触发类型报错。 - 定义接口并指定类型后,TypeScript能正确识别数组元素结构,提供类型检查与代码提示。
- 将
event的any类型替换为CartItem,既避免了类型模糊的潜在问题,也让TypeScript能验证event的结构是否符合预期。
内容的提问来源于stack exchange,提问作者TASHKILA
相关产品推荐
相关产品推荐

