【发布时间】:2017-11-13 15:54:33
【问题描述】:
来自新手的问题。 我正在尝试遵循使用Jake Archibald's IDB library 但使用Typescript 而不是纯Javascript 的Working with IndexedDB 教程。到目前为止,我还没有取得太大的成功。
我的代码如下所示。
import * as idb from "./idb";
const dbPromise: Promise<idb.DB> = idb.default.open('test-db2', 1, (upgradeDb: idb.UpgradeDB) => {
console.log('making a new object store');
if (!upgradeDb.objectStoreNames.contains('firstOS')) {
upgradeDb.createObjectStore('firstOS');
}
});
定义文件加载良好,因为编译器不会抛出任何错误,并且智能感知在 VS Code 中运行良好。
我设法在我的 html 页面上使用 require.js 加载我的模块,但控制台显示以下错误:
Uncaught TypeError: Cannot read property 'default' of undefined
at Object.<anonymous> (main.ts:8)
at Object.execCb (require.min.js:5)
at b.check (require.min.js:5)
at b.<anonymous> (require.min.js:5)
at require.min.js:5
at require.min.js:5
at each (require.min.js:5)
at b.emit (require.min.js:5)
at b.check (require.min.js:5)
at b.enable (require.min.js:5)
现在,如果我从对idb.default.open(...) 的调用中删除default,编译器会告诉我“.../idb”类型上不存在“open”。
该库将idb 导出为默认值。
我错过了某种初始化,但我无法真正看到什么或在哪里。
谁能帮忙?
解决方法
这就是我最终完成这项工作的方式。
import * as idxdb from "./idb";
import "./js/idb.js";
let dbPromise: Promise<idxdb.DB> = idb.open('test-db2', 1, (upgradeDb: idxdb.UpgradeDB) => {
console.log('making a new object store');
if (!upgradeDb.objectStoreNames.contains('firstOS')) {
upgradeDb.createObjectStore('firstOS');
}
});
第一个 import 语句引入了类型,因此它可以编译并提供提示。第二个语句将 idb 对象混在一起。
非常感谢@Josh 为我指明了正确的方向。
【问题讨论】:
标签: typescript indexeddb