在我的 javascript/typescript 项目中我有这段代码
request.onupgradeneeded = (event: IDBVersionChangeEvent) => {
console.log('idb onupgradeneeded firing');
const db = event.target.result;
//if (db != null) {
//console.log(`Upgrading to version ${db.version}`);
if (!request.result.objectStoreNames.contains(this.#name)) {
request.result.createObjectStore(this.#name, {keyPath: 'id', autoIncrement:true});
}
//}
};
但问题是这段代码
event.target.result;
显示下划线:
Property 'result' does not exist on type 'EventTarget'.
如何在打字稿中解决这个问题?
Typescript 库提供的处理程序回调类型中没有足够的类型信息。
也许您可以为dom
定义自己的类型,但手动向下转换目标看起来要简单得多:
indexedDB.open
或者,正如 @kelsny 建议的那样,使用原始请求对象:
const db = (event.target as IDBOpenDBRequest).result;
const db = request.result; // event.target === request
然后你可以这样称呼它:
namespace globalThis {
type DbEvent<T> = Event & {
target: {
result: IDBCursor & { value: T }
}
}
interface IDBRequest<T = any> extends EventTarget {
addEventListener<D>(
type: 'success',
listener: (this: IDBRequest<T>, ev: DbEvent<D>) => any,
options?: boolean | AddEventListenerOptions
): void
}
}