class-validator 使用教程
2026-01-17 08:38:11作者:郁楠烈Hubert
项目介绍
class-validator 是一个基于装饰器的属性验证库,适用于类(class)。它允许开发者通过简单的装饰器来定义和执行复杂的验证规则。这个库非常适合在 TypeScript 项目中使用,可以轻松地集成到现有的项目架构中。
项目快速启动
安装
首先,你需要通过 npm 安装 class-validator:
npm install class-validator --save
请确保使用至少 npm@6,因为从 npm@6 开始,依赖树是扁平化的,这是 class-validator 正常工作所必需的。
基本使用
创建一个类并在你想要验证的属性上添加装饰器:
import { validate, validateOrReject, Contains, IsInt, Length, IsEmail, IsFQDN, IsDate, Min, Max } from 'class-validator';
export class Post {
@Length(10, 20)
title: string;
@Contains('hello')
text: string;
@IsInt()
@Min(0)
@Max(10)
rating: number;
@IsEmail()
email: string;
@IsFQDN()
site: string;
@IsDate()
createDate: Date;
}
let post = new Post();
post.title = 'Hello'; // 应该不通过
post.text = 'this is a great post about hello world'; // 应该通过
post.rating = 11; // 应该不通过
post.email = 'example@example.com'; // 应该通过
post.site = 'example.com'; // 应该通过
post.createDate = new Date(); // 应该通过
validate(post).then(errors => {
if (errors.length > 0) {
console.log('验证失败: ', errors);
} else {
console.log('验证通过');
}
});
应用案例和最佳实践
自定义验证器
你可以创建自定义验证器来满足特定的验证需求。例如,创建一个验证文本长度的自定义验证器:
import { ValidatorConstraint, ValidatorConstraintInterface, ValidationArguments } from 'class-validator';
@ValidatorConstraint({ name: 'customText', async: false })
export class CustomTextLength implements ValidatorConstraintInterface {
validate(text: string, args: ValidationArguments) {
return text.length > 1 && text.length < 10; // 异步验证需要返回一个 Promise<boolean>
}
defaultMessage(args: ValidationArguments) {
return '文本 ($value) 太短或太长';
}
}
然后在你的类中使用这个自定义验证器:
import { Validate } from 'class-validator';
import { CustomTextLength } from './CustomTextLength';
export class Post {
@Validate(CustomTextLength, {
message: '标题太短或太长'
})
title: string;
}
嵌套对象验证
class-validator 也支持嵌套对象的验证。例如:
import { ValidateNested } from 'class-validator';
import { Type } from 'class-transformer';
export class User {
@Length(10, 20)
name: string;
}
export class Post {
@ValidateNested()
@Type(() => User)
user: User;
}
典型生态项目
class-validator 通常与以下项目一起使用,以提供更完整的解决方案:
- class-transformer: 用于对象的序列化和反序列化,与
class-validator结合使用可以实现强大的数据处理和验证。 - TypeORM: 一个 ORM 框架,可以与
class-validator结合使用,实现数据库实体的自动验证。 - NestJS: 一个渐进式的 Node.js 框架,内置了对
class-validator的支持,可以轻松实现模块化和可测试的应用程序。
通过这些生态项目的结合使用,class-validator 可以发挥更大的作用,提供更完整和高效的数据验证解决方案。
登录后查看全文
热门项目推荐
相关项目推荐
GLM-5智谱 AI 正式发布 GLM-5,旨在应对复杂系统工程和长时域智能体任务。Jinja00
GLM-5-w4a8GLM-5-w4a8基于混合专家架构,专为复杂系统工程与长周期智能体任务设计。支持单/多节点部署,适配Atlas 800T A3,采用w4a8量化技术,结合vLLM推理优化,高效平衡性能与精度,助力智能应用开发Jinja00
jiuwenclawJiuwenClaw 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。Python0204- QQwen3.5-397B-A17BQwen3.5 实现了重大飞跃,整合了多模态学习、架构效率、强化学习规模以及全球可访问性等方面的突破性进展,旨在为开发者和企业赋予前所未有的能力与效率。Jinja00
AtomGit城市坐标计划AtomGit 城市坐标计划开启!让开源有坐标,让城市有星火。致力于与城市合伙人共同构建并长期运营一个健康、活跃的本地开发者生态。01
awesome-zig一个关于 Zig 优秀库及资源的协作列表。Makefile00
项目优选
收起
deepin linux kernel
C
27
12
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
608
4.05 K
🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解
Java
69
21
暂无简介
Dart
850
205
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.47 K
829
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
12
1
喝着茶写代码!最易用的自托管一站式代码托管平台,包含Git托管,代码审查,团队协作,软件包和CI/CD。
Go
24
0
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
924
774
🎉 基于Spring Boot、Spring Cloud & Alibaba、Vue3 & Vite、Element Plus的分布式前后端分离微服务架构权限管理系统
Vue
235
152
昇腾LLM分布式训练框架
Python
131
157