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

如何避免TypeScript编译生成代码触发eslint的no-multi-assign错误

问题原因

这个报错并不是你写的TypeScript源码有问题,是TypeScript将ES模块规范的导出代码编译为CommonJS规范产物时,为了兼容循环导出等边界场景,会自动生成exports.xxx = exports.yyy = void 0这类链式赋值代码,且你的ESLint校验范围包含了编译后的JS产物文件,才会触发no-multi-assign规则报错。你调整源码导出写法没有效果,就是因为问题根源和源码导出逻辑无关,是编译产物的自动生成逻辑导致的。

最优解决方案(从根源规避)

按优先级从高到低选择即可:

  • 方案1:调整TS编译配置,输出原生ES模块
    如果你的运行环境(Node.js 14.13+、现代浏览器、前端构建工具)支持原生ES模块,修改tsconfig.json配置即可:
    {
      "compilerOptions": {
        "module": "ESNext",
        "moduleResolution": "NodeNext",
        // 其他原有配置保持不变
      }
    }
    
    调整后TS不会再转译ES模块导出为CommonJS格式,自然不会生成链式赋值的编译产物。
  • 方案2:排除ESLint对编译产物的校验
    绝大多数场景下,ESLint只需要校验你编写的源码文件,不需要校验编译后的产物。直接把你的编译输出目录(通常是dist、build)添加到项目根目录的.eslintignore文件中即可:
    # .eslintignore 新增内容
    dist/
    build/
    
    配置后ESLint不会再扫描编译后的JS文件,自然不会触发对应报错。
兜底方案

如果确实需要编译为CommonJS格式,同时必须校验编译后的JS文件,可以调整ESLint规则,只忽略CommonJS导出场景的链式赋值报错,在.eslintrc.js中添加规则配置:

module.exports = {
  rules: {
    'no-multi-assign': ['error', { ignoreNonDeclaration: true }]
  }
}

该方案侵入性较高,不推荐优先使用。

内容的提问来源于stack exchange,提问作者shubhendu madhukar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 22:36:01