You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IndexedDB onupgradeneeded中result属性不存在TypeScript错误排查

解决IndexedDB onupgradeneeded回调中TypeScript类型错误:EventTarget无result属性

问题背景

在TypeScript中编写IndexedDB升级逻辑时,onupgradeneeded回调里通过event.target?.result获取数据库实例会触发如下类型错误:

Property 'result' does not exist on type 'EventTarget'.ts(2339)

这是因为TypeScript默认将event.target推断为通用EventTarget类型,但实际上它是IDBOpenDBRequest实例——该实例继承自IDBRequest,自带result属性。

解决方案

1. 类型断言明确类型

直接将event.target断言为IDBOpenDBRequest,告诉TypeScript它的实际类型:

const request = window.indexedDB.open("MyTestDatabase", 3);

request.onupgradeneeded = (event) => {
    const db = (event.target as IDBOpenDBRequest).result;
    const objectStore = db.createObjectStore("name", { keyPath: "myKey" });
};

2. 利用回调的this上下文

根据IDBOpenDBRequest的接口定义,onupgradeneeded回调的this指向IDBOpenDBRequest实例,因此可以直接用this.result。注意要使用普通函数(箭头函数会改变this指向):

const request = window.indexedDB.open("MyTestDatabase", 3);

request.onupgradeneeded = function(event) {
    const db = this.result;
    const objectStore = db.createObjectStore("name", { keyPath: "myKey" });
};

3. 直接使用已声明的request变量

既然request本身就是IDBOpenDBRequest实例,回调内部可以直接访问它的result属性:

const request = window.indexedDB.open("MyTestDatabase", 3);

request.onupgradeneeded = (event) => {
    const db = request.result;
    const objectStore = db.createObjectStore("name", { keyPath: "myKey" });
};

内容的提问来源于stack exchange,提问作者THIAGO DE BONIS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 19:50:25