如何在TypeScript的Global.d.ts中声明带附加函数的模块导出类型?
问题场景
我有一个npm模块@mycompany/module,模块导出函数someTool,同时在该函数上附加了canUseFeature1方法,JS代码如下:
// @mycompany/module const someTool = (options) => { // do some cool stuff }; someTool.canUseFeature1 = () => { return canUseSomeFeature1(); }; module.exports = someTool;
目前我已在Global.d.ts中完成了导出函数的类型声明:
declare module '@mycompany/module' { export default function (options: any): any; }
请问如何以类似方式声明someTool.canUseFeature1的类型?
解决方案
你需要定义一个兼具函数类型与额外属性的接口,来描述这个既可以调用、又带有附加方法的导出对象。修改Global.d.ts中的模块声明如下:
declare module '@mycompany/module' { // 定义接口:既是函数,又包含canUseFeature1方法 interface SomeTool { (options: any): any; canUseFeature1(): boolean; // 根据实际返回值调整类型,这里假设返回boolean } // 导出该接口作为默认导出 export default SomeTool; }
说明
- 接口中
(options: any): any描述了函数本身的调用签名 - 接口内的
canUseFeature1(): boolean则声明了附加方法的类型,你可以根据实际返回值替换boolean为对应类型(比如void或其他) - 这种方式可以完美适配外部模块的函数对象类型声明,解决你之前无法适配的问题
内容的提问来源于stack exchange,提问作者Valentine
相关产品推荐
相关产品推荐

