안녕하세요 @realmankwon입니다.
DTO 를 사용할 때 mapped-types 모듈을 사용하면 DTO 의 재사용성을 높일 수 있습니다.
아래와 같이 필요한 모듈을 먼저 설치합니다.
npm i @nestjs/mapped-types
mapped-types에서 사용할 수 있는 기능은 다음과 같습니다.
이것의 사용법을 위해 CreateMovieDto를 이용하여 UpdateMovieDto를 만들어 보도록 하겠습니다.
import { IsNumber, IsOptional, IsString } from 'class-validator';
export class CreateMovieDto {
@IsString()
readonly title: string;
@IsNumber()
readonly year: number;
@IsOptional()
@IsString({ each: true })
readonly genres: string[];
}
export class UpdateMovieDto extends PartialType(CreateMovieDto) {}
export class UpdateMovieDto extends PartialType(CreateMovieDto, InputType) {}
export class UpdateMovieDto extends PickType(CreateMovieDto, ['title'] as const) {}
export class UpdateMovieDto extends OmitType(CreateMovieDto, ['title'] as const) {}
export class AdditionMovieDto {
@IsString()
readonly director: string;
}
export class UpdateMovieDto extends IntersectionType(CreateMovieDto, AdditionMovieDto) {}
export class UpdateMovieDto extends PartialType( PickType(CreateMovieDto, ['title'] as const), ) {}