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

如何配置ESLint规则要求每行仅放置一个独立变量声明语句

强制每个var/let/const声明单独占一行的ESLint配置方案

现有规则不生效的原因

你之前配置的三个规则不符合需求的核心原因如下:

  • one-var、one-var-declaration-per-line:这两个规则仅约束单个声明关键字下通过逗号分隔的多变量声明(比如let a = 1, b = 2这种写法),无法识别同一行内多个独立的、用分号分隔的var/let/const声明语句,因此对你给出的第一行错误代码不会触发校验。
  • max-statements-per-line:默认配置下会统计同一行内所有层级的语句数量,不区分语句是在当前块顶层还是嵌套在函数、类等表达式内部,因此会把第二行代码里函数体内的console.log也计入语句数,导致误报。

精准满足需求的配置

不需要安装额外插件,通过给max-statements-per-line添加忽略节点配置,配合原有两个规则即可完全实现你要的效果:允许单行单变量声明(哪怕赋值为带单行内容的函数表达式),禁止同一行写多个独立变量声明。
完整.eslintrc配置如下:

{
  "rules": {
    "one-var": ["error", "never"],
    "one-var-declaration-per-line": ["error", "always"],
    "max-statements-per-line": [
      "error",
      {
        "max": 1,
        "ignoredNodes": [
          "FunctionExpression > BlockStatement > :first-child:last-child",
          "ArrowFunctionExpression > BlockStatement > :first-child:last-child"
        ]
      }
    ]
  }
}

配置效果验证

对你给出的测试代码,校验结果完全符合预期:

  • 第一行let foo: string; let bar: string;:同一行存在两个独立的顶层变量声明语句,总语句数为2,会被规则标记为错误。
  • 第二行let blah = function blah() { console.log('woot'); };:仅存在1个顶层变量声明语句,函数体内的console.log是函数块内唯一的语句,匹配忽略规则不计入统计,不会被标记为错误。

其他常见场景的校验表现:

  • 逗号分隔的多变量声明(如let a = 1, b = 2)会被one-var规则拦截报错
  • 函数体内同一行写多个语句(如const fn = () => { a(); b() })会被正常拦截报错
  • 单行箭头函数简写(如const double = n => n * 2)无额外嵌套语句节点,不会被误报
  • 单行非变量声明语句(如arr.push(1))符合单语句要求,不会被拦截

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 12:01:14