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

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,但你的回调返回数字,类型不兼容。

直接修改两处:

  1. 给reduce()传入初始值0,明确累加器类型为数字
  2. 回调中直接用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 09:05:30