useShorthandFunctionType
このコンテンツはまだ日本語訳がありません。
Diagnostic Category: lint/style/useShorthandFunctionType
Since: v1.5.0
Sources:
Enforce using function types instead of object type with call signatures.
TypeScript allows for two common ways to declare a type for a function:
- Function type:
() => string
- Object type with a signature:
{ (): string }
The function type form is generally preferred when possible for being more succinct.
This rule suggests using a function type instead of an interface or object type literal with a single call signature.
Examples
Section titled ExamplesInvalid
Section titled Invalidinterface Example { (): string;}
code-block.ts:2:3 lint/style/useShorthandFunctionType FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✖ Use a function type instead of a call signature.
1 │ interface Example {
> 2 │ (): string;
│ ^^^^^^^^^^^
3 │ }
4 │
ℹ Types containing only a call signature can be shortened to a function type.
ℹ Safe fix: Alias a function type instead of using an interface with a call signature.
1 │ - interface·Example·{
2 │ - ··():·string;
3 │ - }
1 │ + type·Example·=·()·=>·string
4 2 │
function foo(example: { (): number }): number { return example();}
code-block.ts:1:25 lint/style/useShorthandFunctionType FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✖ Use a function type instead of a call signature.
> 1 │ function foo(example: { (): number }): number {
│ ^^^^^^^^^^
2 │ return example();
3 │ }
ℹ Types containing only a call signature can be shortened to a function type.
ℹ Safe fix: Use a function type instead of an object type with a call signature.
1 │ - function·foo(example:·{·():·number·}):·number·{
1 │ + function·foo(example:·()·=>·number):·number·{
2 2 │ return example();
3 3 │ }
Valid
Section titled Validtype Example = () => string;
function foo(example: () => number): number { return bar();}
// returns the function itself, not the `this` argument.type ReturnsSelf2 = (arg: string) => ReturnsSelf;
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 equivalent to Overloaded interface.type Intersection = ((data: string) => number) & ((id: number) => string);