prefer-function-type
強制使用具有呼叫簽章的函式類型,而非介面。
🎨
延伸 "plugin:@typescript-eslint/風格"
於 ESLint 設定檔中 將啟用此規則。
🔧
此規則回報的某些問題可透過 --fix
ESLint 命令列選項.
自動修正
- TypeScript 允許使用兩種常見的方式來宣告函式的型別
- 函式類型:
() => string
具有簽章的物件類型:{ (): string }
函式類型形式通常首選,因為它較為簡潔。
此規則建議使用函式類型,而非具有單一呼叫簽章的介面或物件類型文字。
module.exports = {
"rules": {
"@typescript-eslint/prefer-function-type": "error"
}
};
.eslintrc.cjs
在遊戲場中嘗試此規則 ↗
- 範例
- ❌ 錯誤
interface Example {
(): string;
}
✅ 正確function foo(example: { (): number }): number {
return example();
}
✅ 正確interface ReturnsSelf {
// returns the function itself, not the `this` argument.
(arg: string): this;
}
✅ 正確type Example = () => string;
✅ 正確function foo(example: () => number): number {
return bar();
}
✅ 正確// returns the function itself, not the `this` argument.
type ReturnsSelf = (arg: string) => ReturnsSelf;
✅ 正確function foo(bar: { (): string; baz: number }): string {
return bar();
}
✅ 正確interface Foo {
bar: string;
}
interface Bar extends Foo {
(): void;
}
✅ 正確// multiple call signatures (overloads) is allowed:
interface Overloaded {
(data: string): number;
(id: number): string;
}
// this is equivelent to Overloaded interface.
type Intersection = ((data: string) => number) & ((id: number) => string);
✅ 正確在遊戲場中開啟
此規則無法調整。
何時不應使用
若您特別想基於風格因素使用單一呼叫簽章的介面或類型文字,您可以略過此規則。
此規則在觸發像是 `interface Function` 等的全球擴充時,有名為邊界案例的已知問題。這些邊界案例很少見,且通常與奇怪的程式碼有關。我們建議您使用 內嵌的 ESLint 停用註解。請參閱 #454 以取得詳情。