Inférence de type
Trois mécanismes automatiques : les interfaces deviennent un schéma en ligne, class-validator devient du JSON Schema, @HttpCode() donne le bon statut.
DTO typés interface
Quand un type de réponse ou de corps est une interface TypeScript (pas une classe), Swagger ne peut pas l'utiliser comme valeur type: parce que les interfaces sont effacées à l'exécution. nestjs-docfy détecte ça automatiquement et génère un objet schema: en ligne, sans aucun changement à ton code.
// Your existing interface (no need to convert to a class)
export interface RegisterResponseDto {
success: boolean;
message: string | null;
}Sortie générée :
ApiResponse({
status: 201,
description: 'Created',
schema: {
type: 'object',
properties: {
success: { type: 'boolean' },
message: { type: 'string', nullable: true },
},
required: ['success'],
},
}),Supporte : les primitifs, les unions nullables (T | null), les tableaux, les interfaces imbriquées, et les propriétés optionnelles (exclues de required).
Inférence class-validator
Quand une classe DTO utilise des décorateurs class-validator et n'a pas déjà @ApiProperty sur ses propriétés, nestjs-docfy infère un JSON Schema complet à partir des décorateurs de validation, sans annotation manuelle nécessaire.
// create-user.dto.ts
import { IsString, IsEmail, MinLength, IsOptional } from 'class-validator';
export class CreateUserDto {
@IsString()
@MinLength(2)
name: string;
@IsEmail()
email: string;
@IsOptional()
@IsString()
bio?: string;
}Sortie générée :
ApiBody({
schema: {
type: 'object',
properties: {
name: { type: 'string', minLength: 2 },
email: { type: 'string', format: 'email' },
bio: { type: 'string' },
},
required: ['name', 'email'],
},
}),Décorateurs supportés
| Decorator |
|---|
@IsString |
@IsEmail |
@IsUrl |
@IsUUID |
@IsDateString |
@IsNumber |
@IsInt |
@IsBoolean |
@IsArray |
@Min |
@Max |
@MinLength |
@MaxLength |
@IsOptional |
Si une propriété quelconque de la classe a déjà @ApiProperty, l'inférence est ignorée et type: ClassName est utilisé à la place ; tes annotations Swagger existantes ne sont jamais écrasées.
Support @HttpCode()
Le décorateur @HttpCode() de NestJS remplace le code de statut HTTP par défaut d'un handler de route. nestjs-docfy le lit automatiquement et utilise le bon code dans l'ApiResponse généré.
// users.controller.ts
@Post('logout')
@HttpCode(204)
logout(): void { ... }Sortie générée :
logout: [
ApiOperation({ summary: 'Logout' }),
ApiResponse({ status: 204, description: 'No Content' }),
],Sans @HttpCode(), les codes par défaut s'appliquent : 201 pour @Post, 200 pour tous les autres verbes HTTP.