no-redeclare
禁止重新宣告變數。
危險
此 ESLint 規則所檢查的程式碼問題是由 TypeScript 編譯器自動檢查。因此,不建議在新的 TypeScript 專案中啟用此規則。您只需在偏好 ESLint 錯誤訊息多於 TypeScript 編譯器錯誤訊息時,才需要啟用此規則。
此規則延伸了基本 eslint/no-redeclare
規則。它增加了對 TypeScript 函式重載和宣告合併的支援。
如何使用
.eslintrc.cjs
module.exports = {
"rules": {
// Note: you must disable the base rule as it can report incorrect errors
"no-redeclare": "off",
"@typescript-eslint/no-redeclare": "error"
}
};
在此遊戲場中嘗試這條規則 ↗
選項
這條規則新增下列選項
interface Options extends BaseNoRedeclareOptions {
ignoreDeclarationMerge?: boolean;
}
const defaultOptions: Options = {
...baseNoRedeclareDefaultOptions,
ignoreDeclarationMerge: true,
};
ignoreDeclarationMerge
設定為 true
時,此規則將忽略下列集合之間的宣告合併
- interface + interface
- namespace + namespace
- class + interface
- class + namespace
- class + interface + namespace
- function + namespace
- enum + namespace
使用 { ignoreDeclarationMerge: true }
的正確程式碼範例
interface A {
prop1: 1;
}
interface A {
prop2: 2;
}
namespace Foo {
export const a = 1;
}
namespace Foo {
export const b = 2;
}
class Bar {}
namespace Bar {}
function Baz() {}
namespace Baz {}
在遊戲場中開啟注意:即使將此選項設定為 true,如果將某類型和某變數命名為相同名稱,此規則也會回報。這是故意的。同時宣告某變數和某類型為相同名稱通常是意外發生的,而且會導致難以理解的程式碼。如果你有少見的情況是故意將某類型命名為與某變數相同的名稱,請使用停用註解。例如
type something = string;
// eslint-disable-next-line @typescript-eslint/no-redeclare -- intentionally naming the variable the same as the type
const something = 2;
在遊戲場中開啟