Javascript 如何在另一个声明文件中引用lib.dom.d.ts中的类型?

Javascript 如何在另一个声明文件中引用lib.dom.d.ts中的类型?,javascript,typescript,indexeddb,Javascript,Typescript,Indexeddb,我对TypeScript非常陌生,并尝试进行自动化测试,其中我将依赖项注入IndexedDB到我的代码中,但我用来模拟IDB的库没有.d.ts,因此我尝试滚动我自己的简单声明文件来解决这个问题,它看起来像这样: declare let fakeIndexedDB: IDBFactory; declare module 'fake-indexeddb' { export var fakeIndexedDB; } 但是,当我尝试使用此类型时,出现了以下错误: type 'typeof imp

我对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中创建一个类,该类引用具有接口和变量的DOM类型,但它们也不使用“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
函数导入时,建议使用上述语法。查看它是否有效,如果无效,请查阅源代码。

问题

此代码的问题是:

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
函数导入时,建议使用上述语法。看看它是否有效,如果无效,请查阅源代码。

谢谢!我给你举一个百事可乐,希望你能抓住这个范围问题!!我给你沏茶!非常感谢。我给你举一个百事可乐,希望你能抓住这个范围问题!!我给你沏茶!