eslint/no-shadow 懸念
何を行うか
外側スコープで宣言された変数と同一の名前を持つローカル変数の宣言を禁止します。
なぜ問題なのか
シャドーイング(変数の隠蔽)とは、あるローカル変数がその包含スコープ内に存在する変数と同じ名前を持つことを指します。これにより、どの変数が参照されているのかわかりにくくなり、診断が困難なバグを引き起こす可能性があります。
例
このルールに対して誤りなコード例:
var x = 1;
function foo() {
var x = 2; // x は外側の x をシャドーしている
}このルールに対して正しいコード例:
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 で有効化するには、次のように使用できます:
{
"rules": {
"no-shadow": "error"
}
}oxlint --deny no-shadow