型構成要素の重複禁止
ユニオン型またはインターセクション型の重複する構成要素を許可しません。
✅ 有効
拡張 "plugin:@typescript-eslint/"recommended-type-checked"
を ESLint設定 で有効にすると、このルールが有効になります。
🔧 自動修正可能
このルールによって報告されるいくつかの問題は、 --fix
ESLintコマンドラインオプション.
によって自動的に修正できます。
💭 型情報が必要 このルールを実行するには 型情報
が必要です。
TypeScriptは、ユニオン型とインターセクション型内で型(「構成要素」)が互いに重複することをサポートしています。しかし、開発者は通常、各構成要素がそのインターセクションまたはユニオン内で一意であることを期待します。重複する値はコードを冗長にし、一般的に可読性を低下させます。
- ❌ 間違い
- ✅ 正解
type T1 = 'A' | 'A';
type T2 = A | A | B;
type T3 = { a: string } & { a: string };
type T4 = [1, 2, 3] | [1, 2, 3];
type StringA = string;
type StringB = string;
type T5 = StringA | StringB;
プレイグラウンドで開くtype T1 = 'A' | 'B';
type T2 = A | B | C;
type T3 = { a: string } & { b: string };
type T4 = [1, 2, 3] | [1, 2, 3, 4];
type StringA = string;
type NumberB = number;
type T5 = StringA | NumberB;
プレイグラウンドで開く.eslintrc.cjs
module.exports = {
"rules": {
"@typescript-eslint/no-duplicate-type-constituents": "error"
}
};
プレイグラウンドでこのルールを試す ↗
オプション
このルールは次のオプションを受け入れます。
type Options = [
{
ignoreIntersections?: boolean;
ignoreUnions?: boolean;
},
];
const defaultOptions: Options = [
{ ignoreIntersections: false, ignoreUnions: false },
];
ignoreIntersections
trueに設定すると、インターセクション型の構成要素の重複チェックが無視されます。
ignoreUnions
trueに設定すると、ユニオン型の構成要素の重複チェックが無視されます。
使用しない場合
ドキュメントのために同じ型のエイリアスを含めることが便利な場合があります。このルールを完全に無効にする代わりに、ESLintの無効化コメントを使用することを検討してください。
場合によっては、ブランド型は、基になるデータ型を表すためのタイプセーフな方法かもしれません。
型チェックされたLintルールは、従来のLintルールよりも強力ですが、型チェックされたLintingを設定する必要があります。型チェックされたルールを有効にした後にパフォーマンスの低下が発生した場合は、パフォーマンスのトラブルシューティングを参照してください。