简介
typesafe-firestore 是一个适用于 TypeScript 的 Firebase Cloud Firestore ORM 库。它提供了一种类型安全的方式来处理云 Firestore 数据库中的文档和集合。
该库的主要特点如下:
- typesafe-firestore 使用类来描述文档和集合,方便进行 CRUD 操作。
- typesafe-firestore 提供了实时监听功能,可以在文档或集合变化时触发回调。
- typesafe-firestore 使用 TypeScript 泛型,使得代码具有更高的类型安全性。
安装
你可以使用 npm 或 yarn 来安装 typesafe-firestore。下面是安装命令示例:
# 使用 npm 安装 npm install typesafe-firestore # 使用 yarn 安装 yarn add typesafe-firestore
示例代码
下面是一个极简的示例,用于演示如何使用 typesafe-firestore:
-- -------------------- ---- ------- ------ - -- ----- ---- ----------------- ------ - -------------------- --------------------- - ---- --------------------- -- --- -------- ---------------------- -- ----- ----- ---- - ----- ------- ---- ------- - -- ----- ----- ------------ - -------------------------------------- -------- ------ -- ----- ----- --------------- - ---------------------------------------- -------------- -- ------ ----- -------- - --- ------------------ -- ---- ----- ---- - - ----- ----- ---- -- -- ----- ------------------- -- ------ ----- ----- - ----- ------------------ ------------------- -- -- ----- ----- ---- -- --
在上面的示例中,我们定义了一个 User 类,用于描述 users
集合中的文档。我们使用 createDocumentClass
函数来创建一个 UserDocument
类,用于描述一个用户文档的操作。接着,我们使用 createCollectionClass
函数来创建一个 UsersCollection
类,用于描述一个用户集合的操作。最后,我们实例化了 UsersCollection
类,并使用其中的 add
和 getAll
方法来向集合中添加文档,以及获取全部文档。
指南
使用文档类
typesafe-firestore 中的文档类用于描述一个文档的操作。它由一个普通的 TypeScript 类及若干个装饰器组成。
@Collection(name: string)
装饰器用于描述所属集合的名称。例如,如果一个文档类带有 @Collection('users')
装饰器,则表示该文档属于 users
集合。
@DocumentId()
装饰器用于指定文档 ID 的类型。接收一个可选的参数 converter
,用于指定 ID 的转换器。例如,@DocumentId(firestore.FieldValue.serverTimestamp)
表示 ID 采用服务器时间戳,并使用 Firestore 的 serverTimestamp 函数来生成。
@Field(name: string)
装饰器用于描述一个文档字段。接收一个可选的参数 converter
,用于指定字段的转换器。例如,@Field('age', firestore.FieldValue.increment(1))
表示 age 字段自增 1。
以下是一个文档类的示例:
-- -------------------- ---- ------- ------ - --------- - ---- ----------------- ------ - ----------- ----------- ----- - ---- --------------------- -------------------- ----- ---- - ------------- ---- ------- -------------- ------ ------- ------------- ---------------------------------- ----- ------- -
在这个示例中,我们定义了一个 User 类,用于描述 users
集合中的文档。该文档具有一个自动生成的 ID,一个名为 name
的字符串字段,以及一个名为 age
的数字字段,采用自增方式进行修改。
使用集合类
typesafe-firestore 中的集合类用于描述一个集合的操作。它由一个普通的 TypeScript 类及一些静态方法组成。
静态方法 create<T>()
用于创建一个集合类。其中参数 T
为该集合中文档类的类型。例如,create<User>()
将创建一个针对 User
类型的集合类。
以下是一个集合类的示例:
-- -------------------- ---- ------- ------ - -- ----- ---- ----------------- ------ - ---------------- - ---- --------------------- -- ----- ----- ---- - ----- ------- ---- ------- - -- ----- ----- ------------ - -------------------------------------- -------- ------ -- ----- ----- --------------- - ----------------------------------------- -------------- -- ------ ----- -------- - --- ------------------
在这个示例中,我们定义了一个 User 类,用于描述 users
集合中的文档。然后,我们使用 createDocumentClass
函数创建了一个 UserDocument
类,并使用 createCollection
函数创建了一个针对该文档类的 UsersCollection
类。最后,我们实例化了 UsersCollection
类,并使用其实例 usersRef
来对集合进行操作。
使用实时监听
typesafe-firestore 提供了实时监听功能,可以在文档或集合变化时触发回调。
以下是一个实时监听的示例:
-- -------------------- ---- ------- ------ - -- ----- ---- ----------------- ------ - -------------------- --------------------- - ---- --------------------- -- --- -------- ---------------------- -- ----- ----- ---- - ----- ------- ---- ------- - -- ----- ----- ------------ - -------------------------------------- -------- ------ -- ----- ----- --------------- - ---------------------------------------- -------------- -- ------ ----- -------- - --- ------------------ -- -------- -------------------------------------- -- - ------------------------ --- -- -------- ----------------------------------- -- - --------------------------- -- - ------------------------ --- ---
在这个示例中,我们实例化了 UsersCollection
类,并使用其实例 usersRef
来实时监听文档和集合的变化。我们使用 onSnapshot
方法来监听一个文档或集合,并在其变化时触发回调函数。
总结
typesafe-firestore 是一个适用于 TypeScript 的 Firebase Cloud Firestore ORM 库,它提供了一种类型安全的方式来处理云 Firestore 数据库中的文档和集合。本文介绍了 typesafe-firestore 的安装与使用,包括文档类、集合类和实时监听的相关内容。通过学习本文,相信你已经能够熟练使用 typesafe-firestore 来为你的应用程序提供强大的 ORM 功能。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60067355890c4f7277583bbb