Tableaux & Objets Imbriqués
La puissance de my-class-validator réside dans sa capacité à gérer des structures de données complexes et imbriquées (Nested DTOs).
Tableaux (Arrays)
Utilisez @IsArray(options?). Vous pouvez définir le type des éléments contenus dans le tableau via la propriété itemType.
Tableau de Primitifs
Pour un tableau de chaînes ou de nombres.
import { IsArray, MinItems, UniqueItems, generateSchema } from 'my-class-validator';
export class TagsDto {
@IsArray({ itemType: 'string' }) // Tableau de strings
@MinItems(1)
@UniqueItems(true) // Interdit les doublons
tags: string[];
}
export const TagsSchema = generateSchema(TagsDto);
Tableau d'Objets (DTOs)
Pour valider un tableau contenant d'autres objets complexes, passez la Classe à itemType. Le générateur créera récursivement le schéma.
import { IsString, IsArray, generateSchema } from 'my-class-validator';
// 1. DTO Enfant
export class PhotoDto {
@IsString()
url: string;
}
// 2. DTO Parent
export class AlbumDto {
@IsArray({ itemType: PhotoDto }) // <--- Référence à la classe
photos: PhotoDto[];
}
export const AlbumSchema = generateSchema(AlbumDto);
Objets Imbriqués (Nested Objects)
Utilisez @IsObject(options?) pour valider qu'une propriété est un sous-objet conforme à un autre DTO.
import { IsString, IsObject, IsRequired, generateSchema } from 'my-class-validator';
// 1. DTO Enfant (Adresse)
export class AddressDto {
@IsString()
city: string;
@IsString()
zipCode: string;
}
// 2. DTO Parent (Utilisateur)
export class UserProfileDto {
@IsString()
name: string;
@IsObject({ itemType: AddressDto }) // <--- Validation imbriquée
@IsRequired()
address: AddressDto;
}
// On exporte uniquement le schéma parent, AddressSchema est inclus dedans automatiquement.
export const UserProfileSchema = generateSchema(UserProfileDto);