class-validator 用于 TypeScript:完整指南及示例

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

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

开始课程

class-validator 简介

\n\n

class-validator 是一个基于装饰器构建的、用于 TypeScript 和 JavaScript 中数据验证的强大且流行的库。它允许你使用注解在类内部声明式地描述验证规则。这使得代码清晰、可读且易于维护。

\n\n

该库在开发服务器端应用程序(例如基于 NestJS 或 Express)时特别有用,因为在这些应用中需要验证传入的请求、表单数据、配置以及任何其他数据结构。无需编写冗长的 if-else 链,你只需向类的属性添加装饰器即可。

\n\n

为什么需要 class-validator?

\n\n
    \n
  • 声明式: 验证规则定义在数据旁边,提高了可读性。
  • \n
  • 强大的验证器集合: 包含数十个内置装饰器,用于验证字符串、数字、日期、数组、嵌套对象等。
  • \n
  • 自定义验证器: 允许轻松创建你自己的规则。
  • \n
  • 与 TypeScript 集成: 完全支持类型和装饰器。
  • \n
  • 异步验证: 支持需要异步操作的检查(例如,检查数据库中的唯一性)。
  • \n
\n\n

安装

\n\n

要使用 class-validator,你需要 Node.js 和 npm/yarn。安装该库及其必要的依赖项:

\n\n
npm install class-validator class-transformer reflect-metadata
\n\n

或者通过 yarn:

\n\n
yarn add class-validator class-transformer reflect-metadata
\n\n

重要: reflect-metadata 库是装饰器工作的必要条件。确保在你的主文件(例如 index.ts 或 main.ts)中导入它:

\n\n
import 'reflect-metadata';
\n\n

同时,确保你的 tsconfig.json 中包含以下设置:

\n\n
{\n  "compilerOptions": {\n    "experimentalDecorators": true,\n    "emitDecoratorMetadata": true\n  }\n}
\n\n

快速入门

\n\n

让我们创建一个简单的用户模型并对其进行验证。

\n\n
import 'reflect-metadata';\nimport { validate, IsString, IsEmail, MinLength } from 'class-validator';\nimport { plainToClass } from 'class-transformer';\n\nclass User {\n    @IsString()\n    @MinLength(3, { message: '名字必须至少包含3个字符' })\n    name: string;\n\n    @IsEmail({}, { message: '无效的电子邮件地址' })\n    email: string;\n\n    constructor(name: string, email: string) {\n        this.name = name;\n        this.email = email;\n    }\n}\n\nasync function main() {\n    // 创建一个包含无效数据的对象\n    const userData = { name: 'Jo', email: 'not-an-email' };\n    \n    // 将普通对象转换为类的实例\n    const user = plainToClass(User, userData);\n    \n    // 进行验证\n    const errors = await validate(user);\n    \n    if (errors.length > 0) {\n        console.log('验证错误:', errors);\n        errors.forEach(error => {\n            console.log(`字段: ${error.property}`);\n            for (const constraint in error.constraints) {\n                console.log(`  - ${error.constraints[constraint]}`);\n            }\n        });\n    } else {\n        console.log('验证成功!');\n    }\n}\n\nmain();\n// 输出:\n// 验证错误: [...]\n// 字段: name\n//   - 名字必须至少包含3个字符\n// 字段: email\n//   - 无效的电子邮件地址
\n\n

主要方法和装饰器

\n\n

1. @IsString()

\n

功能: 检查值是否为字符串。

\n

参数: 接受一个可选的验证选项对象(例如 { message: '...' })。

\n<

推荐