unified-signatures
ユニオン型またはオプション/レストパラメータを使用して1つに統合できる2つのオーバーロードを禁止します。
🔒
拡張 "plugin:@typescript-eslint/strict"
を ESLint設定 で有効にすると、このルールが有効になります。
関数オーバーロードシグネチャは、非常に異なる複数の方法で呼び出すことができる関数を定義するTypeScriptの方法です。オーバーロードシグネチャは構文と理論的な肥大化を追加するため、可能であれば使用を避けるのが一般的です。ユニオン型と/またはオプションパラメータまたはレストパラメータに切り替えることで、多くの場合、オーバーロードシグネチャの必要性を回避できます。
このルールは、関数オーバーロードシグネチャを単一の関数シグネチャで置き換えることができる場合に報告します。
.eslintrc.cjs
module.exports = {
"rules": {
"@typescript-eslint/unified-signatures": "error"
}
};
Playgroundでこのルールを試す ↗
例
- ❌ 正しくない
- ✅ 正しい
function x(x: number): void;
function x(x: string): void;
Playgroundで開くfunction y(): void;
function y(...x: number[]): void;
Playgroundで開くfunction x(x: number | string): void;
Playgroundで開くfunction y(...x: number[]): void;
Playgroundで開く// This rule won't check overload signatures with different rest parameter types.
// See https://github.com/microsoft/TypeScript/issues/5077
function f(...a: number[]): void;
function f(...a: string[]): void;
Playgroundで開くオプション
このルールは次のオプションを受け入れます。
type Options = [
{
/** Whether two parameters with different names at the same index should be considered different even if their types are the same. */
ignoreDifferentlyNamedParameters?: boolean;
},
];
const defaultOptions: Options = [{ ignoreDifferentlyNamedParameters: false }];
ignoreDifferentlyNamedParameters
ignoreDifferentlyNamedParameters
を使用したこのルールのコード例
- ❌ 正しくない
- ✅ 正しい
function f(a: number): void;
function f(a: string): void;
Playgroundで開くfunction f(a: number): void;
function f(b: string): void;
Playgroundで開く使用しない場合
これは、関数シグネチャオーバーロードの可読性を向上させるための純粋にスタイルに関するルールです。それらを常に互いに隣接させて統合することを望まない場合は、オフにすることができます。