no-redeclare
不允許變數重複宣告
✅ 推薦
在設定檔中使用來自@eslint/js
的recommended
設定啟用此規則
在 JavaScript 中,可以使用 var
重新宣告相同的變數名稱。這可能會導致對於變數實際宣告和初始化的位置感到困惑。
規則詳情
此規則旨在消除在相同範圍內有多個宣告的變數。
此規則的錯誤程式碼範例
在 Playground 中開啟
/*eslint no-redeclare: "error"*/
var a = 3;
var = 10;
class C {
foo() {
var b = 3;
var = 10;
}
static {
var c = 3;
var = 10;
}
}
此規則的正確程式碼範例
在 Playground 中開啟
/*eslint no-redeclare: "error"*/
var a = 3;
a = 10;
class C {
foo() {
var b = 3;
b = 10;
}
static {
var c = 3;
c = 10;
}
}
選項
此規則接受一個可選參數,一個具有布林屬性 "builtinGlobals"
的物件。它預設為 true
。如果設定為 true
,此規則也會檢查內建全域變數(例如 Object
、Array
、Number
…)的重新宣告。
builtinGlobals
"builtinGlobals"
選項將檢查在全域範圍中重新宣告內建全域變數的情況。
{ "builtinGlobals": true }
選項的錯誤程式碼範例
在 Playground 中開啟
/*eslint no-redeclare: ["error", { "builtinGlobals": true }]*/
var = 0;
請注意,當使用 sourceType: "commonjs"
(或 ecmaFeatures.globalReturn
,如果使用預設解析器),程式的最頂層範圍實際上不是全域範圍,而是一個「模組」範圍。在這種情況下,宣告一個以內建全域變數命名的變數不是重新宣告,而是全域變數的遮蔽。在這種情況下,應使用具有 "builtinGlobals"
選項的 no-shadow
規則。
由 TypeScript 處理
當使用 TypeScript 時,可以安全地停用此規則,因為 TypeScript 的編譯器會強制執行此檢查。
請注意,雖然 TypeScript 會捕捉 let
重新宣告和 const
重新宣告,但它不會捕捉 var
重新宣告。因此,如果您在 TypeScript 程式碼庫中使用舊版的 var
關鍵字,此規則仍然會提供一些價值。
相關規則
版本
此規則在 ESLint v0.0.9 中引入。