如何在d.ts文件中创建可复用方法签名?复用函数类型遇语法问题
解决d.ts文件中复用函数签名的问题
你遇到的问题是语法使用错误——在TypeScript的声明文件里,function声明语句后面不能直接跟类型注解(比如export function foo1: IFoo这种写法是不合法的),因为function关键字后需要定义参数列表,而不是直接赋值函数类型。
下面是两种正确的复用函数签名的方式,基于你已有的IFoo接口来实现:
方式1:使用declare function + 函数类型
在模块声明中,直接用declare function结合你定义的IFoo接口来声明每个函数,这样就能复用签名了:
declare module "mymodule" { // 保留你的函数类型接口 interface IFoo { (x: string, y: number): any; } // 复用IFoo类型声明各个函数 declare function foo1: IFoo; declare function foo2: IFoo; declare function foo3: IFoo; // 导出这些函数 export { foo1, foo2, foo3 }; }
方式2:使用export const + 函数类型
你也可以用export const来声明并导出函数,同时指定其类型为IFoo,这种写法在声明文件中同样有效:
declare module "mymodule" { interface IFoo { (x: string, y: number): any; } export const foo1: IFoo; export const foo2: IFoo; export const foo3: IFoo; }
额外优化:用类型别名替代接口
如果你觉得接口写法有点繁琐,也可以用类型别名来定义函数签名,效果完全一致:
declare module "mymodule" { type IFoo = (x: string, y: number) => any; declare function foo1: IFoo; declare function foo2: IFoo; declare function foo3: IFoo; export { foo1, foo2, foo3 }; }
本质上,这两种方式都是利用TypeScript的函数类型特性,将重复的签名逻辑抽离到一个接口/类型别名中,避免了代码冗余。
内容的提问来源于stack exchange,提问作者user9298624
相关产品推荐
相关产品推荐

