Typegoose 用于 TypeScript:完整指南及示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Typegoose 用于 TypeScript:完整指南

\n\n

Typegoose 是一个强大的 Mongoose 封装库,允许您使用 TypeScript 的类和装饰器来定义 MongoDB 模型。它解决了 Node.js 开发中的一个关键问题:TypeScript 的严格类型检查与 Mongoose 动态特性之间的不匹配。无需手动重复定义类型和模式,Typegoose 让您只需一次性地将模型描述为 TypeScript 类,并自动从中生成 Mongoose 模式。

\n\n

为什么需要它?首先,它显著减少了样板代码的数量。您不再需要编写单独的接口和单独的模式——TypeScript 类同时承担了这两项功能。其次,Typegoose 在从文档创建到执行查询的所有阶段都提供了完整的类型安全。IDE 将提示字段、方法及其类型,这几乎消除了因字段名称拼写错误或数据类型不正确而导致的错误。第三,该库支持 Mongoose 的所有功能:虚拟字段、钩子(pre/post)、索引、populate 和中间件。

\n\n

Typegoose 非常适合大型项目,这些项目中代码的可维护性至关重要,也适合希望充分利用 TypeScript 中面向对象编程优势的团队。它可以轻松集成到 NestJS、Express 和其他框架中,提供统一的数据描述标准。

\n\n

安装

\n\n

要安装 Typegoose 及其依赖项,请在终端中执行以下命令:

\n\n
npm install @typegoose/typegoose mongoose\nnpm install -D @types/mongoose
\n\n

如果您使用 yarn:

\n\n
yarn add @typegoose/typegoose mongoose\nyarn add -D @types/mongoose
\n\n

Typegoose 需要 TypeScript 4.0 或更高版本。请确保您的 tsconfig.json 中启用了以下选项:

\n\n
{\n  "compilerOptions": {\n    "experimentalDecorators": true,\n    "emitDecoratorMetadata": true,\n    "target": "ES2020",\n    "module": "commonjs"\n  }\n}
\n\n

快速入门

\n\n

让我们创建一个简单的用户模型并将其保存到 MongoDB。

\n\n
import { prop, getModelForClass } from '@typegoose/typegoose';\nimport mongoose from 'mongoose';\n\n// 1. 定义模型类\nclass User {\n  @prop({ required: true })\n  public name!: string;\n\n  @prop({ required: true, unique: true })\n  public email!: string;\n\n  @prop({ default: 0 })\n  public age!: number;\n}\n\n// 2. 获取 Mongoose 模型\nconst UserModel = getModelForClass(User);\n\n// 3. 连接数据库并操作\nasync function main() {\n  await mongoose.connect('mongodb://localhost:27017/test');\n\n  // 创建用户\n  const user = await UserModel.create({\n    name: 'Alice',\n    email: 'alice@example.com',\n    age: 30,\n  });\n\n  console.log('Created:', user);\n\n  // 查找用户\n  const found = await UserModel.findOne({ email: 'alice@example.com' });\n  console.log('Found:', found);\n}\n\nmain().catch(console.error);
\n\n

这个最小的示例展示了核心思想:带有 @prop 装饰器的 User 类描述了模式,而 getModelForClass 函数则创建了一个立即可用的 Mongoose 模型。

\n\n

主要方法和函数

\n\n

1. @prop() — 属性装饰器

\n

签名: @prop(options?: PropOptions)

\n

描述: 在 Mongoose 模式中定义一个字段。它接受一个选项对象,类似于 Mongoose 中的字段选项(required, default, unique, ref, enum 等)。

\n\n
import { prop } from '@typegoose/typegoose';\n\nclass Product {\n  @prop({ required: true, type: String })\n  public title!: string;\n\n  @prop({ default: 0, min: 0 })\n  public price!: number;\n\n  @prop({ enum: ['a                    

推荐