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.
// Your existing interface (no need to convert to a class)
export interface RegisterResponseDto {
success: boolean;
message: string | null;
}Gegenereerde output:
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
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:
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 |
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
@Post('logout')
@HttpCode(204)
logout(): void { ... }Gegenereerde output:
logout: [
ApiOperation({ summary: 'Logout' }),
ApiResponse({ status: 204, description: 'No Content' }),
],Zonder @HttpCode() gelden de standaardcodes: 201 voor @Post, 200 voor elk ander HTTP-werkwoord.