eslint/no-shadow 可疑
它的作用
禁止变量声明在外部作用域中遮蔽已声明的变量。
为什么这是个问题?
遮蔽(shadowing)是指局部变量与包含其作用域中的变量具有相同名称的过程。这可能导致混淆,因为不清楚具体引用的是哪一个变量,从而引发难以诊断的错误。
示例
以下为 不正确 的代码示例:
js
var x = 1;
function foo() {
var x = 2; // x 遮蔽了外部的 x
}以下为 正确 的代码示例:
js
var x = 1;
function foo() {
var y = 2; // 名称不同,不存在遮蔽
}配置
此规则接受一个配置对象,包含以下属性:
allow
type: string[]
default: []
允许被遮蔽的变量名称列表。
builtinGlobals
type: boolean
default: false
是否报告对内置全局变量的遮蔽。
hoist
type: "all" | "functions" | "functions-and-types" | "never" | "types"
default: "functions-and-types"
控制检查遮蔽时如何处理变量提升。
"all"
即使在外层变量声明之前也报告遮蔽(由于变量提升)。
"functions"
仅报告函数声明被提升时的遮蔽。
"functions-and-types"
报告函数和类型声明被提升时的遮蔽。
"never"
从不在外层变量声明前报告遮蔽。
"types"
仅报告类型声明被提升时的遮蔽。
ignoreFunctionTypeParameterNameValueShadow
type: boolean
default: true
若为 true,则忽略函数类型参数遮蔽值的情况。
示例:const T = 1; function foo<T>() {}
ignoreOnInitialization
type: boolean
default: false
是否在被遮蔽的变量仍处于未初始化状态时忽略变量初始化部分。
ignoreTypeValueShadow
type: boolean
default: true
若为 true,则忽略类型与值同名的情况。
这在 TypeScript 中很常见:type Foo = ...; const Foo = ...;
如何使用
要通过配置文件或 CLI 启用 此规则,可以使用:
json
{
"rules": {
"no-shadow": "error"
}
}bash
oxlint --deny no-shadow