作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在 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了解更多详情。
关于typescript - 如何在两个类之间共享 TypeScript 函数定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55208211/
我是一名优秀的程序员,十分优秀!