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.
// Your existing interface (no need to convert to a class)
export interface RegisterResponseDto {
success: boolean;
message: string | null;
}Salida generada:
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
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:
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 |
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
@Post('logout')
@HttpCode(204)
logout(): void { ... }Salida generada:
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.