在JavaScript文件中编写Dexie.js查询提示缺少类型报错是什么原因?
报错原因
- 该错误是TypeScript类型检查阶段抛出的错误,不属于JavaScript运行时错误,因此无类型检查的Svelte文件可以正常运行,但开启了类型校验的单独JS/TS文件会触发报错。
- Dexie官方默认的
Dexie类类型定义中,没有预声明你自定义的业务表名(本次报错涉及的表为friends),因此TypeScript无法识别初始化后的db实例上存在friends属性。
解决方案
纯JavaScript文件场景(不需要类型校验)
你可以直接通过注释关闭类型检查即可:
- 关闭整个文件的类型检查:在文件首行添加
// @ts-nocheck - 仅关闭单行报错的类型检查:在报错代码行的上一行添加
// @ts-ignore
TypeScript文件场景(需要保留类型校验)
你需要通过自定义Dexie子类的方式,显式声明所有表的类型,示例实现如下:
import Dexie, { Table } from 'dexie'; // 声明friends表对应的字段类型 interface Friend { id?: number; name: string; age: number; // 可根据实际业务补充其他字段 } // 自定义Dexie子类,显式声明所有表属性 class AppDB extends Dexie { friends!: Table<Friend>; // 后续新增其他表都要在这里先声明属性 constructor() { super('你的数据库名称'); // 数据库版本、表结构定义要和声明的表属性对应 this.version(1).stores({ friends: '++id, name, age' }); } } // 导出初始化后的单例db实例,全局复用 export const db = new AppDB();
后续你在任意文件中导入上述导出的db实例,即可正常调用db.friends相关方法,不会再触发该类型报错。
内容的提问来源于stack exchange,提问作者Pål Bergström
相关产品推荐
相关产品推荐

