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

升级到TypeScript4.4后idb调用createObjectStore报TS2345错误如何解决

问题原因

TypeScript 4.4 强化了泛型参数的隐式推导规则,idb 库的createObjectStore方法依赖提前声明的数据库结构泛型,你当前没有给db参数指定明确的类型,TS 会默认将方法入参推导为never,因此传入字符串dbKey会触发类型不匹配报错。

解决步骤

1. 声明数据库结构类型

先定义你的 IndexDB 库包含的对象仓库、键类型、值类型:

import type { IDBPDatabase } from 'idb';

// 定义对象仓库的结构,可根据实际需求扩展
interface UserDB {
  // 格式为:[仓库名]: { key: 主键类型, value: 存储值类型 }
  dbKey: {
    key: string;
    value: any; // 这里替换为你实际存储的数据类型
  };
}

2. 给db参数指定明确类型

给buildDb函数的入参db添加IDBPDatabase<UserDB>类型标注:

import * as idb from 'idb';

// 给入参db添加类型标注
const buildDb = async ({ db }: { db: IDBPDatabase<UserDB> }) => {
  // openDB也可以传入泛型获得完整类型提示
  const oldDB = await idb.openDB<UserDB>('user', 1);
  db.createObjectStore('dbKey'); // 此时不会再触发类型报错
};

临时兼容方案

如果不需要严格的类型校验,可以直接给db指定为any类型快速解决报错:

const buildDb = async ({ db }: { db: any }) => {
  const oldDB = await idb.openDB('user', 1);
  db.createObjectStore('dbKey');
};

内容的提问来源于stack exchange,提问作者jacobcan118

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:24:02