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 を参照してください。
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 で開くinterface T1 {
func: (arg: string) => number;
}
type T2 = {
func: (arg: boolean) => void;
};
// this is equivalent to the overload
interface T3 {
func: ((arg: number) => void) &
((arg: string) => void) &
((arg: boolean) => void);
}
Playground で開くmethod
method
オプションを使用したコードの例。
- ❌ 間違い
- ✅ 正しい
interface T1 {
func: (arg: string) => number;
}
type T2 = {
func: (arg: boolean) => void;
};
Playground で開くinterface T1 {
func(arg: string): number;
}
type T2 = {
func(arg: boolean): void;
};
Playground で開く使用しない場合
オブジェクト/インターフェースの関数型に特定のスタイルを強制したくない場合、および/または strictFunctionTypes
を使用しない場合は、このルールは必要ありません。
ただし、スタイルが不整合な場合、プロジェクトの可読性を損なう可能性があることに注意してください。プロジェクトに最適なこのルールの単一のオプションを選択することをお勧めします。