一个类型安全的 IndexedDB 操作库,提供简洁的事务 API 与仓库模式。
- ✅ 完整的 TypeScript 类型支持
 - 🎯 简洁的 API 设计
 - 🔒 事务 API(CoreDB.transaction)
 - 🧩 仓库模式(Repository)
 
npm install typed-idb
# 或
yarn add typed-idb
# 或
pnpm add typed-idbimport { CoreDB } from "typed-idb";
interface User {
  id: number;
  name: string;
  email: string;
}
// 定义数据库结构
const db = new CoreDB({
  name: "myApp",
  version: 1,
  migrations: [
    {
      version: 1,
      upgrade: (db) => {
        const store = db.createObjectStore("users", { keyPath: "id" });
        store.createIndex("email", "email", { unique: true });
      },
    },
  ],
});
// 添加用户
await db.transaction("users", "readwrite", async (store) => {
  await store.add({
    id: 1,
    name: "John Doe",
    email: "[email protected]",
  });
});
// 查询用户
const user = await db.transaction("users", "readonly", async (store) => {
  return store.get(1);
});import { initDB, createRepository } from "typed-idb";
const db = await initDB({ name: "myApp", version: 1 });
const userRepo = createRepository<User>(db, "users");
await userRepo.add({ id: 1, name: "John", email: "[email protected]" });
const user = await userRepo.get(1);
const adults = await userRepo.query({ age: { $gte: 18 } }, "age");import { CoreDB, transaction } from "typed-idb";
class UserService {
  constructor(public db: CoreDB) {}
  // 装饰器会在方法执行期间绑定同一个事务,
  // 方法体内使用 this.db.getObjectStore('store') 将复用该事务。
  @transaction('users', 'readwrite')
  async createUser(user: User) {
    const store = this.db.getObjectStore('users');
    await store.add(user);
  }
  // 多仓库事务:同样无需改变方法签名
  @transaction(['users', 'logs'], 'readwrite')
  async createUserWithLog(user: User) {
    const users = this.db.getObjectStore('users');
    const logs = this.db.getObjectStore('logs');
    await users.add(user);
    await logs.add({ id: user.id, message: `Created ${user.name}` });
  }
}MIT