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;
プレイグラウンドで開く