no-redeclare
変数の再宣言を禁止します。
危険
この ESLint ルールによってチェックされるコードの問題は、TypeScript コンパイラによって自動的にチェックされます。したがって、新しい TypeScript プロジェクトでこのルールを有効にすることは推奨されません。TypeScript コンパイラのエラーメッセージよりも ESLint のエラーメッセージを優先する場合にのみ、このルールを有効にする必要があります。
このルールは、ベースの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;