在TypeScript声明文件(.d.ts
)中声明一个类时,可以像这样添加一个函数:
declare class Foo {
myFunction (arg1: number, arg2: string): void;
}
但是如果你想在另一个类中拥有一个具有相同签名的函数呢?您当然可以复制并粘贴该行,但您也可以使用type
定义它并多次重用该类型:
declare class Foo {
myFunction: MyFunctionFn;
}
declare class Bar {
myFunction: MyFunctionFn;
}
type MyFunctionFn = (arg1: number, arg2: string) => void;
问题在于VS Code和其他编辑器在自动完成期间如何呈现该功能。以下是显示以下声明的示例:
declare class Foo {
sharedFn: SharedFn;
inlineFn (arg1: number, arg2: string): void;
}
type SharedFn = (arg1: number, arg2: string) => void;
如您所见,inlineFn
正确显示为一种方法,而sharedFn
显示为一个属性(在这种情况下恰好被赋予一个函数值)。
在TypeScript中是否有一种方法可以将其显示为正确的方法,但仍然与其他类共享函数签名?
没有完美的解决方案。这是一个中间解决方案,它比输入所有参数本身的重复性要小,但不如所需的方法注释那么好:
type MyFunctionFn = (arg1: number, arg2: string) => void;
declare class Foo {
myFunction(...args: Parameters<MyFunctionFn>): ReturnType<MyFunctionFn>;
}
declare class Bar {
myFunction(...args: Parameters<MyFunctionFn>): ReturnType<MyFunctionFn>;
}
有关详细信息,请参阅this answer。