gpt4 book ai didi

typescript - 如何在两个类之间共享 TypeScript 函数定义?

转载 作者:搜寻专家 更新时间:2023-10-30 21:45:50 24 4
gpt4 key购买 nike

在 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;

enter image description here

如您所见,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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com