Type inference

Tres mecanismos automáticos: las interfaces se convierten en schema inline, class-validator se convierte en JSON Schema, @HttpCode() se convierte en el status correcto.

Interface-typed DTOs

Cuando un tipo de respuesta o body es una interface de TypeScript (no una clase), Swagger no puede usarla como valor de type: porque las interfaces se borran en runtime. nestjs-docfy detecta esto automáticamente y genera un objeto schema: inline, sin cambios en tu código.

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

Salida generada:

Generated
ApiResponse({
  status: 201,
  description: 'Created',
  schema: {
    type: 'object',
    properties: {
      success: { type: 'boolean' },
      message: { type: 'string', nullable: true },
    },
    required: ['success'],
  },
}),

Soporta: primitivos, uniones nullable (T | null), arrays, interfaces anidadas, y propiedades opcionales (excluidas de required).

class-validator inference

Cuando una clase DTO usa decorators de class-validator y no tiene ya @ApiProperty en sus propiedades, nestjs-docfy infiere un JSON Schema completo a partir de los decorators de validación, sin necesitar anotación manual.

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

Salida generada:

ts
ApiBody({
  schema: {
    type: 'object',
    properties: {
      name:  { type: 'string', minLength: 2 },
      email: { type: 'string', format: 'email' },
      bio:   { type: 'string' },
    },
    required: ['name', 'email'],
  },
}),

Decorators soportados

Decorator
@IsString
@IsEmail
@IsUrl
@IsUUID
@IsDateString
@IsNumber
@IsInt
@IsBoolean
@IsArray
@Min
@Max
@MinLength
@MaxLength
@IsOptional
Preservando anotaciones existentes

Si cualquier propiedad de la clase ya tiene @ApiProperty, la inferencia se omite y en su lugar se usa type: ClassName; tus anotaciones de Swagger existentes nunca se sobrescriben.

@HttpCode() support

El decorator @HttpCode() de NestJS sobrescribe el código de estado HTTP por defecto de un route handler. nestjs-docfy lo lee automáticamente y usa el código correcto en el ApiResponse generado.

users.controller.ts
// users.controller.ts
@Post('logout')
@HttpCode(204)
logout(): void { ... }

Salida generada:

ts
logout: [
  ApiOperation({ summary: 'Logout' }),
  ApiResponse({ status: 204, description: 'No Content' }),
],

Sin @HttpCode(), se aplican los códigos por defecto: 201 para @Post, 200 para cualquier otro verbo HTTP.