Type-inferentie

Drie automatische mechanismen: interfaces worden inline schema, class-validator wordt JSON Schema, @HttpCode() wordt de juiste status.

DTO's met interface-typering

Wanneer een response- of body-type een TypeScript-interface is (geen klasse), kan Swagger het niet als type:-waarde gebruiken omdat interfaces bij runtime verdwijnen. nestjs-docfy detecteert dit automatisch en genereert een inline schema:-object, zonder wijzigingen aan je code.

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

Gegenereerde output:

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

Ondersteunt: primitieven, nullable unions (T | null), arrays, geneste interfaces en optionele properties (uitgesloten van required).

class-validator-inferentie

Wanneer een DTO-klasse class-validator-decorators gebruikt en nog geen @ApiProperty op zijn properties heeft staan, leidt nestjs-docfy een volledig JSON Schema af uit de validatiedecorators, zonder handmatige annotatie nodig.

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

Gegenereerde output:

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

Ondersteunde decorators

Decorator
@IsString
@IsEmail
@IsUrl
@IsUUID
@IsDateString
@IsNumber
@IsInt
@IsBoolean
@IsArray
@Min
@Max
@MinLength
@MaxLength
@IsOptional
Bestaande annotaties behouden

Heeft een property op de klasse al @ApiProperty, dan wordt inferentie overgeslagen en wordt type: ClassName gebruikt in plaats daarvan; je bestaande Swagger-annotaties worden nooit overschreven.

Ondersteuning voor @HttpCode()

De @HttpCode()-decorator van NestJS overschrijft de standaard HTTP-statuscode voor een route-handler. nestjs-docfy leest die automatisch uit en gebruikt de juiste code in de gegenereerde ApiResponse.

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

Gegenereerde output:

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

Zonder @HttpCode() gelden de standaardcodes: 201 voor @Post, 200 voor elk ander HTTP-werkwoord.