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

求助: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 18:17:17