用途:class-validator 是基于装饰器的 TypeScript 校验库,是 NestJS 生态中的标准方案,适用于构建 API 或需要基于类的数据校验场景。
主要能力:提供丰富的内置装饰器,覆盖字符串(IsString、IsEmail、IsUrl、IsUUID、Matches、Length 等)、数字(IsInt、IsNumber、IsPositive、Min、Max)、日期(IsDate、MinDate、IsISO8601)、数组(IsArray、ArrayMinSize、ArrayUnique、ValidateNested)、布尔、枚举、信用卡、电话号码等校验。支持嵌套对象与数组校验、@IsOptional 可选字段、自定义校验器、跨字段校验、校验分组与错误格式化。与 class-transformer 配合可完成类型转换。
使用方式:先安装 npm install class-validator class-transformer,并在 tsconfig.json 中启用 experimentalDecorators 和 emitDecoratorMetadata。用装饰器定义 DTO,通过 plainToInstance 转换数据,再调用 validate 执行校验。在 NestJS 中于 main.ts 全局注册 ValidationPipe,可设置 whitelist、forbidNonWhitelisted、transform 等选项。更新类 DTO 可用 PartialType、OmitType、PickType、IntersectionType。自定义校验器通过 ValidatorConstraint 与 registerDecorator 实现。
适用场景:NestJS 后端 API、类风格 DTO 校验、需要与 class-transformer 集成的项目。
限制:装饰器依赖类,不适合函数式编程模式;客户端校验宜用 Zod 搭配 React Hook Form;非 NestJS 后端 Zod 更框架无关;简单校验 Zod API 更简洁;打包体积较大,类型推断需手动处理。
注意事项:嵌套校验需加 @Type(),ValidationPipe 需开启 whitelist,避免在 DTO 中使用 any,启用装饰器编译选项,使用 class-transformer 转换普通对象。官方文档与完整参考暂未在此资料中提供。