TypeScript icon, indicating that this package has built-in type declarations

3.8.0 • Public • Published


Deploy Coverage Status

Nest.js Swagger DTO decorators

This library combines common @nestjs/swagger, class-transformer and class-validator decorators that are used together into one decorator for full Nest.js DTO lifecycle including OpenAPI schema descriptions.

DTO with nestjs-swagger-dto DTO without nestjs-swagger-dto
import { IsEnum, IsNested, IsString } from 'nestjs-swagger-dto';

class RoleDto {
    optional: true,
    minLength: 3,
    maxLength: 256,
  name?: string;

  @IsString({ optional: true, maxLength: 255 })
  description?: string;

  @IsEnum({ enum: { RoleStatus } })
  status!: RoleStatus;

  @IsNested({ type: PermissionDto, isArray: true })
  permissions!: PermissionDto[];
import { ApiProperty } from '@nestjs/swagger';
import { Type } from 'class-transformer';
import { IsOptional, IsString, MaxLength, MinLength, ValidateNested } from 'class-validator';

export class RoleDto {
  name?: string;

  description?: string;

  @ApiProperty({ enum: RoleStatus, enumName: 'RoleStatus' })
  status!: RoleStatus;

  @ValidateNested({ each: true })
  @Type(() => PermissionDto)
  @ApiProperty({ type: [PermissionDto] })
  permissions!: PermissionDto[];


npm i nestjs-swagger-dto


This library contains the following decorators

Name Description
IsBoolean boolean
IsConstant constant
IsDate date / date-time
IsEnum enum object / array of values
IsNested nested DTO
IsNumber numbers
IsObject typed plain js objects
IsString strings
IsUnknown any json value

All of the decorators support the following parameters:

Name Description
description adds description
deprecated deprecates a field
example adds example
name sets the name for serialized property
optional makes property optional
nullable makes property nullable
isArray changes the type of property to array of items of this type

Also decorators have additional parameters like: min, max for IsNumber.

Headers validation

You can also validate request headers using TypedHeaders decorator.

export class TestHeaders {
    // Note: header names will be lowercased automatically
    name: 'country-code',
    maxLength: 2,
    minLength: 2,
    example: 'US',
  countryCode!: string;

    name: 'timestamp',
    isDate: { format: 'date-time' },
  timestamp!: string;

@Controller({ path: 'test', version: '1' })
export class TestController {
  async test(@TypedHeaders() headers: TestHeaders): Promise<string> {
    return headers.countryCode;


Bootstrapped with: create-ts-lib-gh

This project is Mit Licensed.

Package Sidebar


npm i nestjs-swagger-dto

Weekly Downloads






Unpacked Size

44.5 kB

Total Files


Last publish


  • glebbash