[개발] # 8. Nest.js - mapped-types 모듈 사용법

안녕하세요 @realmankwon입니다.

DTO 를 사용할 때 mapped-types 모듈을 사용하면 DTO 의 재사용성을 높일 수 있습니다.
아래와 같이 필요한 모듈을 먼저 설치합니다.

npm i @nestjs/mapped-types

mapped-types에서 사용할 수 있는 기능은 다음과 같습니다.

  • PartialType
  • PickType
  • OmitType
  • IntersectionType
  • Composition

이것의 사용법을 위해 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[];
}

1 . PartialType

  • 모든 필드값을 선택사항으로 변경하여 재사용합니다.
export class UpdateMovieDto extends PartialType(CreateMovieDto) {}

  • 만약 부모의 타입과 생성하는 타입이 다르다면 두번째 파라미터에 생성하는 타입을 입력해 주면 됩니다.
export class UpdateMovieDto extends PartialType(CreateMovieDto, InputType) {}

2 . PickType

  • 필요한 필드값을 지정하여 재사용합니다.
export class UpdateMovieDto extends PickType(CreateMovieDto, ['title'] as const) {}

3 . OmitType

  • 불필요한 필드값을 제거하고 재사용합니다.
export class UpdateMovieDto extends OmitType(CreateMovieDto, ['title'] as const) {}

4 . IntersectionType

  • 두개의 DTO를 하나로 합쳐서 재사용합니다.
export class AdditionMovieDto {
  @IsString()
  readonly director: string;
}
export class UpdateMovieDto extends IntersectionType(CreateMovieDto, AdditionMovieDto) {}

5 . Composition

  • 위의 4개와는 다르게 별도의 Type이 있는 것이 아니라 2개의 타입을 사용하여 필요로 하는 형태로 만들어 재사용하는 것입니다.
  • 예를들어 모든 필드를 선택사항으로 변경한 후에 필요한 필드값을 지정하여 재사용할 경우 PartialType을 먼저 선언하고 내부에 PickType을 선언하는 방식으로 사용하면 됩니다.
export class UpdateMovieDto extends PartialType( PickType(CreateMovieDto, ['title'] as const), ) {}


Sort:  

@realmankwon transfered 30.000 KRWP to @krwp.burn. voting percent : 100.00%, voting power : 21.63%, steem power : 1924257.23, STU KRW : 1200.
@realmankwon staking status : 10675.694 KRWP
@realmankwon limit for KRWP voting service : 10.675 KRWP (rate : 0.001)
What you sent : 30.000 KRWP (Voting Percent over 100 %)
Refund balance : 25.881 KRWP [61684231 - 86f88cdf9a3fc27adc08f3f983dc5283c42515d4]

오늘도 응원합니다^^

Coin Marketplace

STEEM 0.16
TRX 0.16
JST 0.031
BTC 59077.53
ETH 2518.13
USDT 1.00
SBD 2.48