如何在另一个声明文件中引用 lib.dom.d.ts 中的类型?
How can I reference a type in lib.dom.d.ts in another declaration file?
我是 TypeScript 的新手,正在尝试进行自动化测试,我将 IndexedDB 依赖注入到我的代码中,但是我用来模拟 IDB 的库没有 .d.ts
,所以我试图推出我自己的简单声明文件来解决这个问题,它看起来像这样:
declare let fakeIndexedDB: IDBFactory;
declare module 'fake-indexeddb' {
export var fakeIndexedDB;
}
但是,当我尝试使用这种类型时,出现错误:
type 'typeof import("fake-indexeddb")' is missing the following properties from type 'IDBFactory': cmp, deleteDatabase, open
鼠标悬停在VSCode,IDBFactory的类型好像是lib.dom.d.ts:
中的这种类型
declare var IDBFactory: {
prototype: IDBFactory;
new(): IDBFactory;
};
但是我要导入的是它正上方的接口类型。我如何在我的声明文件中说我想引用 lib.dom.ts 中的接口,而不是使用它的 var?我可以看到 jsdom 能够在他们的 .d.ts 中创建一个 class 来引用 DOM 带有接口和 var 的类型,但他们也不使用 "declare module" .
问题
这段代码的问题:
declare let fakeIndexedDB: IDBFactory;
declare module 'fake-indexeddb' {
export var fakeIndexedDB;
}
是fakeIndexedDB
导出的类型是any
。它与上面声明的变量不同。基本上,像这样定义的 fake-indexeddb
是一个模块,它导出一个名为 fakeIndexedDB
的未指定类型的变量。
解决方案
你应该做的是:
declare module 'fake-indexeddb' {
const fakeIndexedDB: IDBFactory;
export = fakeIndexedDB;
}
是否使用 export =
、export
或 export default
取决于实际 JavaScript 库的构建方式。如果 fake-indexeddb
导出单个成员,建议使用上述语法,并且在使用 require
函数导入时效果很好。看看能不能用,不行就查阅源码
我是 TypeScript 的新手,正在尝试进行自动化测试,我将 IndexedDB 依赖注入到我的代码中,但是我用来模拟 IDB 的库没有 .d.ts
,所以我试图推出我自己的简单声明文件来解决这个问题,它看起来像这样:
declare let fakeIndexedDB: IDBFactory;
declare module 'fake-indexeddb' {
export var fakeIndexedDB;
}
但是,当我尝试使用这种类型时,出现错误:
type 'typeof import("fake-indexeddb")' is missing the following properties from type 'IDBFactory': cmp, deleteDatabase, open
鼠标悬停在VSCode,IDBFactory的类型好像是lib.dom.d.ts:
中的这种类型declare var IDBFactory: {
prototype: IDBFactory;
new(): IDBFactory;
};
但是我要导入的是它正上方的接口类型。我如何在我的声明文件中说我想引用 lib.dom.ts 中的接口,而不是使用它的 var?我可以看到 jsdom 能够在他们的 .d.ts 中创建一个 class 来引用 DOM 带有接口和 var 的类型,但他们也不使用 "declare module" .
问题
这段代码的问题:
declare let fakeIndexedDB: IDBFactory;
declare module 'fake-indexeddb' {
export var fakeIndexedDB;
}
是fakeIndexedDB
导出的类型是any
。它与上面声明的变量不同。基本上,像这样定义的 fake-indexeddb
是一个模块,它导出一个名为 fakeIndexedDB
的未指定类型的变量。
解决方案
你应该做的是:
declare module 'fake-indexeddb' {
const fakeIndexedDB: IDBFactory;
export = fakeIndexedDB;
}
是否使用 export =
、export
或 export default
取决于实际 JavaScript 库的构建方式。如果 fake-indexeddb
导出单个成员,建议使用上述语法,并且在使用 require
函数导入时效果很好。看看能不能用,不行就查阅源码