Typescript 具有属性的函数顶级导出的非类型化模块
我想为你写一份打字文件。我将它保留在我自己的项目内部(这可能在以后相关)。变更集有两个用例:Typescript 具有属性的函数顶级导出的非类型化模块,typescript,declaration,Typescript,Declaration,我想为你写一份打字文件。我将它保留在我自己的项目内部(这可能在以后相关)。变更集有两个用例: import * as changeset from "changeset"; changeset({}, {}); // call as function changeset.applyChanges({}, {}); // call a property on changeset changeset中的实际函数称为apply,而不是applyChanges。我在这里更改了它,以避免与Javasc
import * as changeset from "changeset";
changeset({}, {}); // call as function
changeset.applyChanges({}, {}); // call a property on changeset
changeset
中的实际函数称为apply
,而不是applyChanges
。我在这里更改了它,以避免与Javascript内置的apply
方法混淆
为此,我设置了上述文件(index.ts
)和changeset.d.ts
declare function changeset(objA: any, objB: any): any;
declare module "changeset" {
export function applyChanges(changes: any, obj: any): any;
}
changeset.applyChanges(…)
工作正常,changeset(…)
不能:
This expression is not callable.
Type 'typeof import("changeset")' has no call signatures.
我的.d.ts
与TypeScript非常相似,只是缺少export=changeset代码>在底部。我不完全理解为什么,但是添加导出会导致index.ts
中的导入出错:
Could not find a declaration file for module 'changeset'.
据我所知,不同之处在于其他.d.ts
文件是从node\u模块
导入的,而这个文件是我项目的一部分
有没有办法在单个项目中包含这样复杂的模块声明?
编辑
尝试了另一种方式:
declare module "changeset" {
const changeset: {
(objA: any, objB: any): any;
applyChanges: (changes: any, obj: any) => any;
};
export = changeset;
}
与以前相同的错误:changeset.applyChanges(…)
工作正常,changeset(…)
不能…我认为您的类型很好,但是如果changeset
模块有一个默认导出(主函数,其上的属性也是函数),您可能希望这样导入它:
import changeset from "changeset";
啊啊啊啊,我打开了esModuleInterop
。你搞定了-谢谢!