冗長な型構成要素の禁止
何もせず、型情報をオーバーライドする共用体と交差のメンバーを許可しません。
✅
拡張 "plugin:@typescript-eslint/"recommended-type-checked" を ESLint設定 で有効にすると、このルールが有効になります。
💭
このルールを実行するには 型情報 が必要です。
一部の型は、共用体または交差内の他の型(「構成要素」)をオーバーライドしたり、他の型によってオーバーライドされたりすることがあります。TypeScriptの型の集合論には、構成要素型が親の共用体または交差で役に立たない場合が含まれます。
| 共用体内
anyとunknownは他のすべての共用体メンバーを「オーバーライド」しますneverは、戻り値の型の場合を除き、どの位置でも共用体から削除されますstringなどのプリミティブ型は、""などのリテラル型を「オーバーライド」します
& 交差内
anyとneverは他のすべての交差メンバーを「オーバーライド」しますunknownは交差から削除されます- リテラル型は、交差内のプリミティブ型を「オーバーライド」します
""などのリテラル型は、stringなどのプリミティブ型を「オーバーライド」します
.eslintrc.cjs
module.exports = {
"rules": {
"@typescript-eslint/no-redundant-type-constituents": "error"
}
};
プレイグラウンドでこのルールを試す ↗
例
- ❌ 間違い
- ✅ 正解
type UnionAny = any | 'foo';
type UnionUnknown = unknown | 'foo';
type UnionNever = never | 'foo';
type UnionBooleanLiteral = boolean | false;
type UnionNumberLiteral = number | 1;
type UnionStringLiteral = string | 'foo';
type IntersectionAny = any & 'foo';
type IntersectionUnknown = string & unknown;
type IntersectionNever = string | never;
type IntersectionBooleanLiteral = boolean & false;
type IntersectionNumberLiteral = number & 1;
type IntersectionStringLiteral = string & 'foo';
プレイグラウンドで開くtype UnionAny = any;
type UnionUnknown = unknown;
type UnionNever = never;
type UnionBooleanLiteral = boolean;
type UnionNumberLiteral = number;
type UnionStringLiteral = string;
type IntersectionAny = any;
type IntersectionUnknown = string;
type IntersectionNever = string;
type IntersectionBooleanLiteral = false;
type IntersectionNumberLiteral = 1;
type IntersectionStringLiteral = 'foo';
プレイグラウンドで開く制限事項
このルールは安全性を重視し、ボトム型、トップ型、およびリテラル型とプリミティブ型の比較にのみ機能します。
オプション
このルールは設定できません。
使用しない場合
ドキュメントを分かりやすくするために、冗長な型構成要素を意図的に含めるプロジェクトもあります。たとえば、次のコードでは、unknown によって冗長になっているにもかかわらず、共用体に string が含まれています
/**
* Normally a string name, but sometimes arbitrary unknown data.
*/
type NameOrOther = string | unknown;
これらの不要な型構成要素を強く好む場合は、このルールは適さない可能性があります。
参考資料
型チェック付きlintルールは、従来のlintルールよりも強力ですが、型チェック付きlintingを設定する必要があります。型チェック付きルールを有効にした後にパフォーマンスの低下が発生した場合は、パフォーマンストラブルシューティングを参照してください。