为什么 @typescript-eslint/no-redeclare 规则指示误报?

问题描述 投票:0回答:1

我有一个 typescript 项目,其中通过 eslinttypescript-eslint 支持 linting。

请注意,这只是一个最小的工作示例。

这是一个 repl 链接

index.ts

function testfn(value: number) {
    if (value === 10) {
        const result = value * 2;

        return result;
    }

    const result = value * 3;

    return result;
}

console.log(testfn(11));

.eslintrc.js

module.exports = {
    root: true,
  parser: "@typescript-eslint/parser",
  parserOptions: {
    ecmaVersion: "latest",
    project: "./tsconfig.json"
  },
  plugins: ["@typescript-eslint"],
  extends: ["plugin:@typescript-eslint/recommended"],
  rules: {
    "no-redeclare": "off",
    "@typescript-eslint/no-redeclare": "error",
  },
};

tsconfig.json

{
  "compilerOptions": {
    "downlevelIteration": true,
    "strict": true,
    "esModuleInterop": true,
    "resolveJsonModule": true,
    "moduleResolution": "node",
    "sourceMap": true,
    "noImplicitReturns": true,
    "noImplicitOverride": true,
    "importHelpers": true
  }
}

package.json

{
  "name": "no-redeclare-scope-issue",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "lint": "eslint . --ext .ts"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@typescript-eslint/eslint-plugin": "^4.29.3",
    "@typescript-eslint/parser": "^4.29.3",
    "eslint": "^7.32.0",
    "tslib": "^2.3.1",
    "typescript": "^4.3.5"
  }
}

当我执行

lint
脚本时,我收到此 lint 错误:

> eslint . --ext .ts


/home/runner/no-redeclare-scope-issue/index.ts
  8:8  error  'result' is already defined  @typescript-eslint/no-redeclare

✖ 1 problem (1 error, 0 warnings)

这是意想不到的,因为在

result
语句内声明的变量
if
应该与在其外部声明的变量隔离,因为
if
语句有自己的作用域。

请注意,当我从

ecmaVersion: "latest"
中删除属性
.eslintrc.js
时,我没有收到任何错误。

这是一个问题还是预期的行为?为什么?

typescript eslint typescript-eslint
1个回答
0
投票

提供的代码不再报告

plugin:@typescript-eslint/no-redeclare
的任何问题。 请参阅 typescript-eslint 游乐场,显示没有 lint 报告的代码

使用相同的

package-lock.json
创建项目副本确实会重现该问题。但是在没有
package-lock.json
(安装新版本的软件包)的情况下创建副本不再重现该错误。

万岁,软件进步! 🙌

© www.soinside.com 2019 - 2024. All rights reserved.