
NestJS에서PartialType은@nestjs/mapped-types패키지에서 제공하는 유틸리티 함수로, 전달된 DTO 클래스의 모든 속성을선택적(optional)으로 만드는 새로운 클래스를 생성한다.
즉,PartialType은 기존 DTO의 모든 속성을선택적변경시켜 새로운 DTO를 생성하도록 도와준다.
PartialType 을 사용하기 위해선 아래와 같은 라이브러리를 설치해야한다.
$ npm i --save @nestjs/mapped-types
PartialType 사용해보기만약, 아래와 같이 CreateMoveDTO 가 있다 가정한다.
// CreateMoveDTO.ts
import { IsString, IsNumber } from 'class-validator';
export class CreateMoiveDTO {
@IsString()
title: string;
@IsNumber()
year: number;
@IsString({ each: true })
genres: string[];
}
해당 DTO는 title, year, genres 의 필드를 가진다.
종종 DTO를 생성할 때 존재하는 DTO에서 특정 필드를 제거하거나, 모두 선택적(Optional) 화 하거나, 특정 필드만 선택하여 변경하고 싶은 경우가 많이 있다. 이때 사용되는 라이브러리가 @nestjs/mapped-types 의 PartialType 이다.
사용법은 아래와 같이 새롭게 만들고자 하는 DTO를 작성하고 PartialType 를 상속받는다.
import { PartialType } from '@nestjs/mapped-types';
import { CreateMoiveDTO } from './create-movie.dto';
export class UpdateMovieDTO extends PartialType(CreateMoveDTO) {}
PartialType(`Optional`화 시키고 싶은 DTO 클래스)
위와 같이 Optional화 시키고자 하는 클래스를 PartialType 에 사용한다.
위 PartialType 으로 생성된 UpdateMovieDTO 는 아래와 동등하다.
export class UpdateMovieDTO{
title?: string;
year?: number;
genres?: string[];
}
위 DTO는 아래와 같은 동작 방식을 가진다.
title, year, genres ) 필수로 요청 데이터에 포함되어야 한다.year 필드만 업데이트하려면 { "year": 2024 } 와 같이 보낼 수 있다.PartialType의 장점!