メインコンテンツにスキップ

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

リソース

ESLint coreから ❤️ を込めて。