我有一个 typescript 项目,其中通过 eslint 和 typescript-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
时,我没有收到任何错误。
这是一个问题还是预期的行为?为什么?
提供的代码不再报告
plugin:@typescript-eslint/no-redeclare
的任何问题。 请参阅 typescript-eslint 游乐场,显示没有 lint 报告的代码。
使用相同的
package-lock.json
创建项目副本确实会重现该问题。但是在没有 package-lock.json
(安装新版本的软件包)的情况下创建副本不再重现该错误。
万岁,软件进步! 🙌