求助:TypeScript中@typescript-eslint/no-unused-expressions错误的原因与解决
错误原因分析
你触发的@typescript-eslint/no-unused-expressions规则,目的是禁止无意义的未使用表达式。问题出在:
map方法的核心作用是转换数组元素并返回新数组,但你调用map后既没把它的返回值赋值给任何变量,也没做其他处理,这就形成了一个没有实际用途的表达式。- 你的代码逻辑只是遍历数组累加
rev,用map属于误用——map不是用来执行修改外部变量这类副作用操作的。
解决方法
推荐两种更合理的写法:
方法1:改用forEach遍历(最贴合你的原始逻辑)
forEach是专门用来遍历数组执行副作用操作的,不会返回新数组,也就不会产生未使用的表达式:
const calculate = (countryId: string) => { let rev = 0; countryMap.get(countryId)?.forEach((companies) => { rev += Number(companies.profitAndLoss); rev = Number(rev.toFixed(2)); }); return rev; };
方法2:使用reduce累加(更规范的函数式写法)
如果想避免修改外部变量,用reduce直接计算累加值更符合函数式编程风格,也更简洁:
const calculate = (countryId: string) => { const companies = countryMap.get(countryId); if (!companies) return 0; return companies.reduce((total, company) => { const newTotal = total + Number(company.profitAndLoss); return Number(newTotal.toFixed(2)); }, 0); };
额外优化提示
每次循环都调用toFixed可能会累积精度误差,建议只在最终返回时做一次小数位处理:
// 优化后的forEach版本 const calculate = (countryId: string) => { let rev = 0; countryMap.get(countryId)?.forEach((companies) => { rev += Number(companies.profitAndLoss); }); return Number(rev.toFixed(2)); };
内容的提问来源于stack exchange,提问作者infinite.loop
相关产品推荐
相关产品推荐

