TypeScript中使用JavaScript reduce方法报错的解决办法
修复TypeScript中Sequelize查询结果使用reduce()的类型错误
我正在通过构建Node.js应用学习TypeScript,使用Sequelize操作MySQL数据库,想要对从数据库获取的查询结果使用.reduce()方法。
以下是我的代码:
const orderedInstances = await createOrderedItemClass.findAll({where: {cartId: cart.dataValues.id}}); orderedInstances.reduce((prev, current)=>{ return prev.dataValues.food_total_sum as number + current.dataValues.food_total_sum as number },)
TypeScript抛出的错误信息如下:
Argument of type '(prev: createOrderedItemClass, current: createOrderedItemClass) => number' is not assignable to parameter of type '(previousValue: createOrderedItemClass, currentValue: createOrderedItemClass, currentIndex: number, array: createOrderedItemClass[]) => createOrderedItemClass'. Type 'number' is not assignable to type 'createOrderedItemClass'.
修复方案
错误核心是reduce()未指定初始值,TypeScript默认推断累加器类型为数组元素的createOrderedItemClass,但你的回调返回数字,类型不兼容。
直接修改两处:
- 给
reduce()传入初始值0,明确累加器类型为数字 - 回调中直接用
prev(数字)累加当前项的数值,不再访问prev.dataValues
修复后的代码:
const orderedInstances = await createOrderedItemClass.findAll({where: {cartId: cart.dataValues.id}}); const totalSum = orderedInstances.reduce((prev, current) => { return prev + (current.dataValues.food_total_sum as number); }, 0);
优化建议
- 如果Sequelize模型中
food_total_sum已定义为数字类型,可移除as number断言:
const totalSum = orderedInstances.reduce((prev, current) => prev + current.dataValues.food_total_sum, 0);
内容的提问来源于stack exchange,提问作者kingsJayson
相关产品推荐
相关产品推荐

