javascript - 如何在另一个声明文件中引用 lib.dom.d.ts 中的类型?
问题描述
我对 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 中创建一个类,该类引用具有接口和 var 的 DOM 类型,但它们也不使用“声明模块”。
解决方案
问题
这段代码的问题:
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
函数导入时它可以正常工作。看看它是否有效,如果没有,请查阅源代码。
推荐阅读
- filter - 在 POWER BI 中停用应用于卡的过滤器
- dictionary - 合并 Ansible 字典
- dm-script - 将多个 STEM 信号读入多个数据立方体
- google-admin-sdk - 将 G Suite Directory API 的访问令牌限制为特定 OU
- java - 如何使用 shell 脚本/ANT 脚本/java 代码/python 代码修改 zip 文件中的 JSON 文件?其中哪一个是高效和简单的?
- python-3.x - Python在linux环境中将Excel工作表范围导出为图像
- python - 如何将蒙面熊猫 DataFrame 列设置为列表列
- dm-script - 将 XY 校准从 2D 图像复制到 3D 图像
- laravel - Laravel 7 用户注册后没有发送验证电子邮件
- javascript - 创建具有 UTC/GMT 的时区下拉列表