Types Mappés
Alors que vous construisez des fonctionnalités comme CRUD (Créer/Lire/Mettre à jour/Supprimer), il est souvent utile de construire des variantes sur un type d’entité de base. Nest fournit plusieurs fonctions utilitaires qui effectuent des transformations de types pour rendre cette tâche plus pratique.
Partiel
Lorsque vous créez des types de validation d’entrée (également appelés DTO), il est souvent utile de construire des variations create et update sur le même type. Par exemple, la variante create peut exiger tous les champs, tandis que la variante update peut rendre tous les champs facultatifs.
Nest fournit la fonction utilitaire PartialType()
pour faciliter cette tâche et minimiser le code redondant.
La fonction PartialType()
renvoie un type (classe) avec toutes les propriétés du type d’entrée définies comme facultatives. Par exemple, supposons que nous ayons un type create comme suit :
import { ApiProperty } from '@nestjs/swagger';
export class CreateCatDto { @ApiProperty() name: string;
@ApiProperty() age: number;
@ApiProperty() breed: string;}
Par défaut, tous ces champs sont requis. Pour créer un type avec les mêmes champs, mais chacun étant facultatif, utilisez PartialType()
en passant la référence de classe (CreateCatDto
) en argument :
export class UpdateCatDto extends PartialType(CreateCatDto) {}
Choisir
La fonction PickType()
construit un nouveau type (classe) en sélectionnant un ensemble de propriétés d’un type d’entrée. Par exemple, supposons que nous commençons avec un type comme :
import { ApiProperty } from '@nestjs/swagger';
export class CreateCatDto { @ApiProperty() name: string;
@ApiProperty() age: number;
@ApiProperty() breed: string;}
Nous pouvons sélectionner un ensemble de propriétés de cette classe en utilisant la fonction utilitaire PickType()
:
export class UpdateCatAgeDto extends PickType(CreateCatDto, ['age'] as const) {}
Omettre
La fonction OmitType()
construit un type en sélectionnant toutes les propriétés d’un type d’entrée et en supprimant un ensemble particulier de clés. Par exemple, supposons que nous commençons avec un type comme :
import { ApiProperty } from '@nestjs/swagger';
export class CreateCatDto { @ApiProperty() name: string;
@ApiProperty() age: number;
@ApiProperty() breed: string;}
Nous pouvons générer un type dérivé qui a chaque propriété sauf name
comme montré ci-dessous. Dans cette construction, le deuxième argument de OmitType
est un tableau de noms de propriétés :
export class UpdateCatDto extends OmitType(CreateCatDto, ['name'] as const) {}
Intersection
La fonction IntersectionType()
combine deux types en un nouveau type (classe). Par exemple, supposons que nous commencions avec deux types comme :
import { ApiProperty } from '@nestjs/swagger';
export class CreateCatDto { @ApiProperty() name: string;
@ApiProperty() breed: string;}
export class AdditionalCatInfo { @ApiProperty() color: string;}
Nous pouvons générer un nouveau type qui combine toutes les propriétés des deux types :
export class UpdateCatDto extends IntersectionType( CreateCatDto, AdditionalCatInfo,) {}
Composition
Les fonctions utilitaires de mappage de types sont composables. Par exemple, ce qui suit produira un type (classe) qui a toutes les propriétés du type CreateCatDto
sauf pour name
, et ces propriétés seront définies comme facultatives :
export class UpdateCatDto extends PartialType( OmitType(CreateCatDto, ['name'] as const),) {}