This content got low rating by people.

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

Words
231
Reading
2 min
Listen
Play
5y

안녕하세요 realmankwon@realmankwon입니다.
alt

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), ) {}
[개발] # 8. Nest.js - mapped-types 모듈 사용법 | Ecency