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.

Sua interface
// Your existing interface (no need to convert to a class)
export interface RegisterResponseDto {
  success: boolean;
  message: string | null;
}

Sortie générée :

Generated
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
// 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 :

ts
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
Préserver les annotations existantes

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
// users.controller.ts
@Post('logout')
@HttpCode(204)
logout(): void { ... }

Sortie générée :

ts
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.