如何在 javascript indexdb typescript 中获取 event.target.result 工作?

问题描述 投票:0回答:2

在我的 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'.

如何在打字稿中解决这个问题?

javascript typescript indexeddb
2个回答
0
投票

Typescript 库提供的处理程序回调类型中没有足够的类型信息。

也许您可以为 

dom

定义自己的类型,但手动向下转换目标看起来要简单得多:

indexedDB.open

或者,正如 @kelsny 建议的那样,使用原始请求对象:

const db = (event.target as IDBOpenDBRequest).result;



0
投票

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 } }

© www.soinside.com 2019 - 2024. All rights reserved.