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

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

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

开始课程
\n

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

\n\n
\n

1. 这是什么以及为什么需要它

\n

TypeStack/class-validator 库是一个基于装饰器的强大数据验证工具,适用于 TypeScript 和 JavaScript。它允许开发者直接在类中使用属性装饰器来描述验证规则。这使得代码更具可读性、自文档化,并大大简化了传入数据的处理,尤其是在处理 REST API、表单或任何其他数据源时。

\n

为什么需要它?在现代 Web 开发中,数据来自多种来源:HTTP 请求、配置文件、数据库。如果没有可靠的验证,这些数据可能导致运行时错误、安全漏洞或仅仅是应用程序运行不正常。class-validator 通过提供声明式数据检查方法解决了这个问题。您无需编写冗长的 if-else 结构,只需向类属性添加装饰器,库就会自动检查它们是否符合指定规则。

\n

另一个关键优势是与 TypeScript 的紧密集成。装饰器不仅允许验证数据,还可以定义其类型,从而使开发过程更安全、更可预测。该库支持广泛的内置验证器(从简单的字符串长度检查到复杂的正则表达式),并允许轻松创建自定义验证器。

\n
\n\n
\n

2. 安装

\n

要安装 class-validator 库及其必需的依赖项 reflect-metadata,请在项目终端中执行以下命令:

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

安装后,需要确保您的 tsconfig.json 文件中启用了以下选项,以便装饰器正常工作:

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

同样重要的是,在应用程序的最开始处导入 reflect-metadata(通常在主文件 index.ts 或 app.ts 中):

\n
import "reflect-metadata";
\n
\n\n
\n

3. 快速入门

\n

让我们看一个最小的工作示例。创建一个带有字段验证的用户类:

\n
import "reflect-metadata";\nimport { validate, IsString, IsEmail, MinLength } from "class-validator";\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    const user = new User("Jo", "invalid-email");\n    const errors = await validate(user);\n\n    if (errors.length > 0) {\n        console.log("验证错误:");\n        errors.forEach(error => {\n            console.log(`- ${error.property}: ${Object.values(error.constraints).join(", ")}`);\n        });\n    } else {\n        console.log("验证成功!");\n    }\n}\n\nmain();\n// 输出:\n// 验证错误:\n// - name: 名字必须至少包含3个字符\n// - email: 无效的电子邮件地址
\n

在这个例子中,我们创建了一个 User 类,向其属性添加了装饰器,并调用了 validate() 函数。如果数据不符合规则,它会返回一个错误数组。

\n
\n\n
\n

4. 主要方法/函数/类

推荐