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

method-signature-style

特定のメソッドシグネチャ構文の使用を強制します。

🔧

このルールによって報告されるいくつかの問題は、自動的に修正可能です。 --fix ESLint コマンドラインオプション.

TypeScript は、オブジェクト/インターフェースの関数プロパティを定義する 2 つの方法を提供します。

interface Example {
// method shorthand syntax
func(arg: string): number;

// regular property with function type
func: (arg: string) => number;
}

この 2 つは非常によく似ており、ほとんどの場合、どちらを使用しても問題ありません。

良いプラクティスは、TypeScript の strict オプション (strictFunctionTypes を意味します) を使用することです。これにより、関数プロパティのみの正しい型チェックが可能になります (メソッドシグネチャは古い動作になります)。

TypeScript FAQ

同じ型のメソッドと関数プロパティは異なる動作をします。メソッドは常に引数において双変ですが、関数プロパティは strictFunctionTypes の下では引数において反変です。

その背後にある理由は、コンパイラオプションの TypeScript PR を参照してください。

.eslintrc.cjs
module.exports = {
"rules": {
"@typescript-eslint/method-signature-style": "error"
}
};

Playground でこのルールを試す ↗

オプション

このルールは次のオプションを受け入れます

type Options = ['method' | 'property'];

const defaultOptions: Options = ['property'];

このルールは、1 つの文字列オプションを受け入れます

  • "property": 関数のプロパティシグネチャの使用を強制します。TypeScript の厳格モードと組み合わせて、最大限の正確さを強制するために使用します。
  • "method": 関数のメソッドシグネチャの使用を強制します。TypeScript の厳格モードを使用しておらず、このスタイルを好む場合は、これを使用します。

デフォルトは "property" です。

property

property オプションを使用したコードの例。

interface T1 {
func(arg: string): number;
}
type T2 = {
func(arg: boolean): void;
};
interface T3 {
func(arg: number): void;
func(arg: string): void;
func(arg: boolean): void;
}
Playground で開く

method

method オプションを使用したコードの例。

interface T1 {
func: (arg: string) => number;
}
type T2 = {
func: (arg: boolean) => void;
};
Playground で開く

使用しない場合

オブジェクト/インターフェースの関数型に特定のスタイルを強制したくない場合、および/または strictFunctionTypes を使用しない場合は、このルールは必要ありません。

ただし、スタイルが不整合な場合、プロジェクトの可読性を損なう可能性があることに注意してください。プロジェクトに最適なこのルールの単一のオプションを選択することをお勧めします。

リソース