You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:46:15