跳至主要內容

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"
}
};

在此遊戲場中嘗試這條規則 ↗

選項

請參閱 eslint/no-redeclare 選項

這條規則新增下列選項

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;
在遊戲場中開啟

資源

來自 ESLint 核心,懷抱 ❤️ 取得。