带有属性的函数顶层导出的无类型模块
Untyped module for function top-level export with properties
我正在尝试为 changeset 编写类型文件。我将它保留在我自己的项目内部(稍后可能会相关)。变更集有两个用例:
import * as changeset from "changeset";
changeset({}, {}); // call as function
changeset.applyChanges({}, {}); // call a property on changeset
the actual function in changeset
is called apply
, not applyChanges
. I've changed it here to avoid confusion with Javascript's built in apply
method.
为此,我设置了上述文件 (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(...)
不...
我认为你的类型没问题,但如果 changeset
模块有一个默认的导出(主函数,其上的属性也是函数),你可能想像这样导入它:
import changeset from "changeset";
我正在尝试为 changeset 编写类型文件。我将它保留在我自己的项目内部(稍后可能会相关)。变更集有两个用例:
import * as changeset from "changeset";
changeset({}, {}); // call as function
changeset.applyChanges({}, {}); // call a property on changeset
the actual function in
changeset
is calledapply
, notapplyChanges
. I've changed it here to avoid confusion with Javascript's built inapply
method.
为此,我设置了上述文件 (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(...)
不...
我认为你的类型没问题,但如果 changeset
模块有一个默认的导出(主函数,其上的属性也是函数),你可能想像这样导入它:
import changeset from "changeset";