@nestjs/graphql
- NestJS의 GraphQL 모듈에서 제공하는 패키지이다.
- GraphQL 스키마를 작성하고 관리하는 데 유용한 여러 유틸리티를 제공한다.
MapperType
- MapperType이라는 용어는 NestJS 또는 일반적인 GraphQL 패키지에서 널리 사용되는 표준 용어는 아니다.
- 일반적으로 '매퍼(mapper)'는 하나의 데이터 형식을 다른 형식으로 변환하는 기능을 의미이다.
- 특히 GraphQL이나 TypeScript에서 데이터 타입을 변환하거나 특정 필드만 선택할 때 사용하는 유틸리티 타입들을 가리킬 수 있다.
1. PartialType
import { PartialType } from '@nestjs/graphql';
import { CreateUserInput } from './create-user.input';
export class UpdateUserInput extends PartialType(CreateUserInput) {}
- 기존 타입의 모든 필드를 선택 사항(optional)으로 만드는 데 사용된다.
- 업데이트 요청 시 모든 필드를 요구하지 않고, 일부 필드만 수정할 수 있게 할 때 유용하다.
- export 하고 모든 field가 required가 아닌 class를 만들어 준다.
2. PickType
import { PickType } from '@nestjs/graphql';
import { User } from './user.model';
export class PublicUser extends PickType(User, ['id', 'name'] as const) {}
- 기존 타입에서 특정 필드만 선택하여 새로운 타입을 만드는 데 사용된다.
- 주로 데이터를 선택적으로 노출해야 할 때 유용하다.
- input type에서 몇 가지 property를 선택해 class를 만들어 준다.
3. OmitType
import { OmitType } from '@nestjs/graphql';
import { User } from './user.model';
export class SafeUser extends OmitType(User, ['password'] as const) {}
- 기존 타입에서 특정 필드를 제외한 새로운 타입을 만드는 데 사용된다.
- 특정 필드를 제외한 나머지 필드를 사용하고자 할 때 유용하다.
- base class에서 class를 만드는데 몇 몇 field를 제외하고 만들어 준다.
4. IntersectionType
import { ObjectType, Field, Int } from '@nestjs/graphql';
@ObjectType()
class Person {
@Field()
name: string;
@Field(() => Int)
age: number;
}
@ObjectType()
class Address {
@Field()
street: string;
@Field()
city: string;
}
import { IntersectionType } from '@nestjs/graphql';
@ObjectType()
class PersonWithAddress extends IntersectionType(Person, Address) {}
- 여러 GraphQL 객체 타입을 결합하여 새로운 타입을 생성하는 데 사용된다.
- TypeScript의 & 연산자(교차 타입)와 유사하게 동작하며, 여러 객체의 속성을 하나로 합치는 역할을 한다.
'Frontend > Nest.js' 카테고리의 다른 글
NestJS의 기본 모듈 구조 (0) | 2024.07.30 |
---|---|
GraphQL 스키마에서 enum 타입을 정의할 때 사용, registerEnumType (0) | 2024.07.29 |
유저 프로필 수정 시 Mapped types 주의할 점 (0) | 2024.06.21 |
GraphQL 스키마를 정의할 때 사용되는 데코레이터 (0) | 2024.06.21 |
InputTypes and ArgumentTypes (0) | 2024.06.21 |