我正在尝试为changeset编写打字文件。我将其保留在我自己的项目内部(稍后可能与此有关)。变更集有两个用例:
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的suggestion非常相似,只在底部缺少export = changeset;
。我不完全理解为什么,但是添加导出会导致index.ts
中的导入错误:
Could not find a declaration file for module 'changeset'.
据我所知,区别在于其他.d.ts
文件是从node_modules
导入的,而这是我项目的隐含部分。
是否可以在单个项目中包含这样的复杂模块声明?
编辑
尝试了另一种方式:
declare module "changeset" {
const changeset: {
(objA: any, objB: any): any;
applyChanges: (changes: any, obj: any) => any;
};
export = changeset;
}
与以前相同的错误:changeset.applyChanges(...)
正常工作,changeset(...)
无法...
答案 0 :(得分:1)
我认为您的类型不错,但是如果changeset
模块具有默认导出(主函数,其上的属性也是函数),您可能希望这样导入它:
import changeset from "changeset";