# @bigbluebutton/store 中文文档

规范地址：https://npmcn.com/package/%40bigbluebutton/store/

版本：2\.0\.0-alpha\.36
npm 元数据更新时间：2026-09-17T13:18:09.524Z
中文译文更新时间：2026-11-08T02:15:28.987Z
软件包许可：Apache-2\.0

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40bigbluebutton/store
原文对照：https://npmcn.com/package/%40bigbluebutton/store/?lang=original
项目主页：https://github.com/bigbluebutton/tldraw#readme
源码仓库：https://github.com/bigbluebutton/tldraw

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：589 kB，84 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- 运行依赖：4 个
- 首次发布：2024-05-22T19:33:02.730Z
- 最新版本发布：2026-09-17T13:18:09.326Z
- 近 30 天下载量：7156（2026-10-08 至 2026-11-06，npm 官方下载统计）
- 已发布版本数：13（近 12 个月 5 个）

## 中文简介

Big BlueButton's fork of tldraw 2.0-alpha.19 - 一个小小的绘图应用(商店).

## 安装

```sh
npm install @bigbluebutton/store
```

也可以使用：`pnpm add @bigbluebutton/store`、`yarn add @bigbluebutton/store`、`bun add @bigbluebutton/store`

## README

# @ bigblue 按钮/ tlstore

`tlstore` 是一个创建和管理数据的库.

> 在这个文库中,"记录"是存储在打入的ID下的对象.

`tlstore` 用于 [笔画](https://www.tldraw.com/) 以存储其数据.

它被设计为与 `tlstate` (@ bigbluebutton/tlstate) (英语).

# 使用量

首先为您的记录创建类型 .

```ts
interface Book extends BaseRecord<'book'> {
    title: string
    author: ID<Author>
    numPages: number
}

interface Author extends BaseRecord<'author'> {
    name: string
    isPseudonym: boolean
}
```

然后创建你的 `RecordType` 实例.

```ts
const Book = createRecordType<Book>('book')

const Author = createRecordType<Author>('author').withDefaultProperties(() => ({
    isPseudonym: false,
}))
```

然后创建你的 `RecordStore` 举个例子.

```ts
const store = new RecordStore<Book | Author>()
```

然后可以创建记录,添加到商店,更新,并去除.

```ts
const tolkeinId = Author.createCustomId('tolkein')

store.put([
    Author.create({
        id: jrrTolkeinId,
        name: 'J.R.R Tolkein',
    }),
])

store.update(tolkeinId, (author) => ({
    ...author,
    name: 'DJJ Tolkz',
    isPseudonym: true,
}))

store.remove(tolkeinId)
```

* * *

# API 密码

## `RecordStore`

这个 `RecordStore` 班级是图书馆的主要班级.

```ts
const store = new RecordStore()
```

### `put(records: R[]): void`

将一些记录添加到商店. 如果它们已经存在,那就是一个错误.

```ts
const record = Author.create({
    name: 'J.R.R Tolkein',
    id: Author.createCustomId('tolkein'),
})

store.put([record])
```

### `update(id: ID<R>, updater: (record: R) => R): void`

更新记录。 要同时更新多个记录,请使用 `update` 方法 `TypedRecordStore` 课.

```ts
const id = Author.createCustomId('tolkein')

store.update(id, (r) => ({ ...r, name: 'Jimmy Tolks' }))
```

### `remove(ids: ID<R>[]): void`

从商店中取出一些记录 以他们的身份证.

```ts
const id = Author.createCustomId('tolkein')

store.remove([id])
```

### `get(id: ID<R>): R`

以 ID 获取商店记录的值 .

```ts
const id = Author.createCustomId('tolkein')

const result = store.get(id)
```

### `allRecords(): R[]`

获取商店中所有值的阵列 .

```ts
const results = store.allRecords()
```

### `clear(): void`

从商店取出所有记录 .

```ts
store.clear()
```

### `has(id: ID<R>): boolean`

获取记录店是否有记录存储在给定的ID下.

```ts
const id = Author.createCustomId('tolkein')

const result = store.has(id)
```

### `serialize(filter?: (record: R) => boolean): RecordStoreSnapshot<R>`

对面 `deserialize`从唱片店创建 JSON 有效载荷.

```ts
const serialized = store.serialize()
```

```ts
const serialized = store.serialize((record) => record.name === 'J.R.R Tolkein')
```

### `deserialize(snapshot: RecordStoreSnapshot<R>): void`

对面 `serialize`。用简单的 JSON 结构定义的记录替换商店的当前记录.

```ts
const serialized = { ... }

store.deserialize(serialized)
```

### `listen(listener: ((entry: HistoryEntry) => void): () => void`

向商店添加新收听器 商店会在每次历史变化时调用函数. 返回一个删除收听器的函数.

```ts
store.listen((entry) => doSomethingWith(entry))
```

### `mergeRemoteChanges(fn: () => void): void`

合并远程源的更改而不会触发听众 .

```ts
store.mergeRemoteChanges(() => {
    store.put(recordsFromRemoteSource)
})
```

### `createDerivationCache(name: string, derive: ((record: R) => R | undefined)): DerivationCache<R>`

创建新的衍生缓存 .

```ts
const derivationCache = createDerivationCache('popular_authors', (record) => {
    return record.popularity > 62 ? record : undefined
})
```

* * *

## `RecordType`

这个 `RecordType` 类用于定义记录的结构.

```ts
const recordType = new RecordType('author', () => ({ living: true }))
```

`RecordType` 实例通常与 `createRecordType`。 。 。 .

### `create(properties: Pick<R, RequiredProperties> & Omit<Partial<R>, RequiredProperties>): R`

创建此类型的新记录 .

```ts
const record = recordType.create({ name: 'J.R.R Tolkein' })
```

### `clone(record: R): R`

切除这种记录.

```ts
const record = recordType.create({ name: 'J.R.R Tolkein' })

const clone = recordType.clone(record)
```

### `createId(): ID<R>`

创建用于此类型记录的ID .

```ts
const id = recordType.createId()
```

### `createCustomId(id: string): ID<R>`

创建自定义 为了记录这种类型.

```ts
const id = recordType.createCustomId('tolkein')
```

### `isInstance`

检查一个值是否是此记录类型的实例 .

```ts
const record = recordType.create({ name: 'J.R.R Tolkein' })

const result1 = recordType.isInstance(record) // true
const result2 = recordType.isInstance(someOtherRecord) // false
```

### `isId`

检查该类型记录的值是否为 ID .

```ts
const id = recordType.createCustomId('tolkein')

const result1 = recordType.isId(id) // true
const result2 = recordType.isId(someOtherId) // false
```

### `withDefaultProperties`

创建带有默认属性的新记录类型 .

```ts
const youngLivingAuthor = new RecordType('author', () => ({ age: 28, living: true }))

const oldDeadAuthor = recordType.withDefaultProperties({ age: 93, living: false })
```

## `RecordStoreQueries`

开始

## 帮助者

### `executeQuery`

开始

### `DerivationCache`

这个 `DerivationCache` 类用于创建衍生记录的缓存.

```ts
const derivationCache = new DerivationCache('popular_authors', (record) => {
    return record.popularity > 62 ? record : undefined
})
```

### `createRecordType`

一个帮助者用来创建新 `RecordType` 没有默认属性.

```ts
const recordType = createRecordType('author'))
```

### `assertIdType`

一个帮助者用来断言一个值是特定类型记录的ID.

```ts
const id = recordType.createCustomId('tolkein')

assertIdType(id, recordType)
```

* * *

## 类型

### `ID`

一个用来代表记录的ID的类型.

```ts
const id: ID<Author> = Author.createCustomId('tolkein')
```

### `BaseRecord`

A 类 `BaseRecord` 是一个有身份和类型的记录。 这是所有记录的基础类型.

```ts
type AuthorRecord extends BaseRecord<"author"> {
  name: string
  age: number
  living: boolean
}
```

### `AllRecords`

一个在唱片店中获取所有记录类型的助手.

```ts
type AllAuthorRecords = AllRecords<RecordStore<Author>>
```

### `RecordsDiff`

描述更改为记录的diff .

### `CollectionDiff`

描述对收藏的更改的 diff .

## 许可证

该寄存器中的源代码(以及我们的2.0+发行和发行)目前根据Apache-2.0获得许可. 这些许可证在即将发行的"2.0"中可能会被更改. 如果你打算在商业产品中使用拖网,请联系 [你好@ bigbluebutton.com](mailto://hello@bigbluebutton.com)。 。 。 .

## 常见问题

### @bigbluebutton/store 是什么？

Big BlueButton's fork of tldraw 2\.0-alpha\.19 - 一个小小的绘图应用\(商店\)\.

### 如何安装 @bigbluebutton/store？

在项目目录运行 npm install @bigbluebutton/store，或使用 pnpm add / yarn add / bun add。

### @bigbluebutton/store 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @bigbluebutton/store 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @bigbluebutton/store 可以商用吗？

@bigbluebutton/store 使用 Apache-2\.0 许可。宽松许可：允许商业使用、修改和再分发，并附带明确的专利授权；分发时需保留许可与 NOTICE 文件，修改过的文件要注明改动。以上为概括，不构成法律意见，请以许可原文为准。

### @bigbluebutton/store 的下载量有多少？

根据 npm 官方下载统计，@bigbluebutton/store 在 2026/10/08 – 2026/11/06 这 30 天内被下载 7,156 次，日均约 239 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @bigbluebutton/store 还在维护吗？

最新版本 2\.0\.0-alpha\.36 发布于 2026/09/17（1 个月前）；至今共发布 13 个版本，其中过去 12 个月发布了 5 个；首次发布于 2024/05/23。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

