Nested DTOs với @ValidateNested() và @Type():
typescript
import { ValidateNested, IsArray, ArrayMinSize } from 'class-validator';
import { Type } from 'class-transformer';
class AddressDto {
@IsString() @Length(2, 100)
street: string;
@IsString() @IsPostalCode('VN')
zipCode: string;
}
class CreateUserDto {
@IsString() @MinLength(2)
name: string;
@ValidateNested() // Validate nested object
@Type(() => AddressDto) // Phải có @Type để transform
address: AddressDto;
@IsArray()
@ArrayMinSize(1)
@ValidateNested({ each: true }) // Validate từng item
@Type(() => AddressDto)
addresses: AddressDto[];
}Conditional validation với @ValidateIf():
typescript
@IsOptional()
paymentMethod?: string;
@ValidateIf(obj => obj.paymentMethod === 'CREDIT_CARD')
@IsCreditCard()
cardNumber?: string; // Chỉ validate nếu paymentMethod là CREDIT_CARDPitfall: @Type(() => NestedClass) là bắt buộc cho @ValidateNested() — thiếu thì validation bỏ qua nested object.