adjacent-overload-signatures
関数のオーバーロードシグネチャが連続していることを要求します。
🎨
拡張 "plugin:@typescript-eslint/stylistic"
を ESLint設定 で有効にすると、このルールが有効になります。
関数のオーバーロードシグネチャは、関数が呼び出される複数の方法(場合によっては異なる戻り値の型を持つ)を表します。関数を記述するインターフェースまたは型エイリアスでは、すべてのオーバーロードシグネチャを互いに隣接して配置するのが一般的です。型の別の場所に配置されたシグネチャは、将来コードを読む開発者に見落とされやすくなります。
.eslintrc.cjs
module.exports = {
"rules": {
"@typescript-eslint/adjacent-overload-signatures": "error"
}
};
プレイグラウンドでこのルールを試す ↗
例
- ❌ 不正
- ✅ 正しい
declare namespace Foo {
export function foo(s: string): void;
export function foo(n: number): void;
export function bar(): void;
export function foo(sn: string | number): void;
}
type Foo = {
foo(s: string): void;
foo(n: number): void;
bar(): void;
foo(sn: string | number): void;
};
interface Foo {
foo(s: string): void;
foo(n: number): void;
bar(): void;
foo(sn: string | number): void;
}
class Foo {
foo(s: string): void;
foo(n: number): void;
bar(): void {}
foo(sn: string | number): void {}
}
export function foo(s: string): void;
export function foo(n: number): void;
export function bar(): void;
export function foo(sn: string | number): void;
プレイグラウンドで開くdeclare namespace Foo {
export function foo(s: string): void;
export function foo(n: number): void;
export function foo(sn: string | number): void;
export function bar(): void;
}
type Foo = {
foo(s: string): void;
foo(n: number): void;
foo(sn: string | number): void;
bar(): void;
};
interface Foo {
foo(s: string): void;
foo(n: number): void;
foo(sn: string | number): void;
bar(): void;
}
class Foo {
foo(s: string): void;
foo(n: number): void;
foo(sn: string | number): void {}
bar(): void {}
}
export function bar(): void;
export function foo(s: string): void;
export function foo(n: number): void;
export function foo(sn: string | number): void;
プレイグラウンドで開くオプション
このルールは設定できません。
使用しない場合
オーバーロードシグネチャを型の他の意味のある部分と並べて配置すると便利な場合があります。たとえば、関数の各オーバーロードが異なるプロパティに対応する場合、各オーバーロードを対応するプロパティの隣に配置したい場合があります。このルールを完全に無効にするのではなく、これらの特定の状況にはESLint disable コメントを使用することを検討できます。