Aller au contenu principal

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);