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

reduce的previousValue与currentValue可类型不同吗?附TS报错排查

问题核心原因

你的reduce回调函数存在语法结构错误,多嵌套了一层未执行的匿名函数,逻辑完全没有按预期运行:

  • 你给reduce传入的第一层回调 (newObj, [key, val]) => {} 内部没有直接返回累计的数字值,反而定义了一个从未执行的第二层函数 (cumulativValue, ii) => {},最终回调返回值是函数类型,和你初始值设置的数字类型冲突,触发TypeScript类型推断异常,抛出类型不匹配错误。
  • 参数命名也存在逻辑混乱:第一层回调的第一个参数就是你需要的累计值,不需要再单独定义第二层的cumulativValue参数。

修复后的代码

totalPrice = Object.entries(
  buyTicketData.pricingAndInvoicingType === PricingAndInvoicingType.invoiceItems
    ? buyTicketData.invoiceItems
    : buyTicketData.pricingOptions[startPaymentIn?.pricingOptionId]?.invoiceItems ?? {}
).reduce((cumulativeValue, [key, val]) => {
  return cumulativeValue + 
    ((val.quantity ?? startPaymentIn?.invoiceItems?.[key] ?? 0) * parseInt(val.unitPrice));
}, 0);

额外优化点

  • 补充了pricingOptions[startPaymentIn?.pricingOptionId]后的可选链操作符?.,避免pricingOptionId不存在时访问invoiceItems抛出运行时错误
  • 给取不到invoiceItems的场景补充了兜底空对象?? {},避免Object.entries接收到undefined报错
  • 补充了startPaymentIn?.invoiceItems后的可选链操作符?.,避免访问不存在的key时报错
  • 把原来的双等号改成了全等号===,避免类型隐式转换导致的判断错误

内容的提问来源于stack exchange,提问作者János

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:39:01