Type 'CartItem[]'不可赋值给类型never[]的报错原因是什么?
报错原因
该报错的核心是组件内的cartItems属性未显式声明类型,TypeScript自动将其推导为never[]类型:
- 如果你仅写了
cartItems = []来声明属性,没有指定类型,TypeScript会默认判定这个空数组的元素永远不允许被赋值,类型就是never[] - 而
getCartItems接口返回的是CartItem[]类型,两种类型不匹配,因此抛出赋值错误。
修复方案
- 给组件的
cartItems属性显式指定类型,替换你原来的属性声明写法即可:
cartItems: CartItem[] = [];
注意要提前在组件文件中导入CartItem类型,避免出现类型未定义的报错。
- 补充完善
CartService中getCartItems方法的逻辑,你当前贴出的代码未写完map算子的逻辑,需要确保最终返回CartItem[]类型的结果,和方法声明的返回值类型匹配:
@Injectable({ providedIn: 'root' }) export class CartService { constructor(private http: HttpClient) { } getCartItems(): Observable<CartItem[]> { return this.http.get<CartItem[]>(cartUrl).pipe( map((result: any[]) => { let cartItems: CartItem[] = []; // 此处添加你的业务转换逻辑,将接口返回的原始数据转换为CartItem类型 result.forEach(rawItem => { cartItems.push({ id: rawItem.id, name: rawItem.goodsName, price: rawItem.sellPrice, count: rawItem.buyCount // 其余字段按你的CartItem定义补全 } as CartItem) }) return cartItems; // 必须显式返回转换后的cartItems数组 }) ) } }
内容的提问来源于stack exchange,提问作者Neris Canak
相关产品推荐
相关产品推荐

