升级到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
相关产品推荐
相关产品推荐

