반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Operater
- RxSwift
- graphql
- typeorm
- init
- SwiftUI
- @EnvironmentObject
- Operators
- Xcode
- swift6
- URL(string:)
- Bug
- subject
- Creating Operators
- NullObject
- @Binding
- init?
- vim
- dismiss
- @State
- nestjs
- nonisolated
- @Environment
- ios14
- SWIFT
- RFC1738/1808
- NavigationLink
- RxCocoa
- operator
- IOS
Archives
- Today
- Total
Tunko Development Diary
[NestJS][GraphQL] mapped-types 정리 본문
Documentation | NestJS - A progressive Node.js framework
Nest 에서 제공하는 기능인 Mapped-type은
CRUD 와 같은 기능을 구축할떄 Entity 클래스의 유형을 변경하는 기능이다.
@nestjs/graphql 패키지에서 제공한다.
기능의 종류
- Partial : 부분적인, 불완전한
- Pick : 고르다, 선택하다, 뽑다
- Omit : 빠뜨리다, 누락[제외]시키다, 생략하다
- Intersection : 교차로
예제 class
@InputType()
class CreateUserInput {
@Field()
email: string;
@Field()
password: string;
@Field()
firstName: string;
}
Partial
Entity 모든 필드를 선택사항으로 바꾼다.
동일한 Entity유형에서 변형을 만들어 부분적으로 선택하여 형태를 전달 할 수 있도록한다.
@InputType()
export class UpdateUserInput extends PartialType(CreateUserInput) {}
만약 부모 클래스의 타입이 @ObjectType 으로 선언 되어있고
PartialType이 다른 타입(예를들어 @InputType) 이라면 두번째 인자에 해당 타입을 추가해주어야 한다.
@InputType()
export class UpdateUserInput extends PartialType(CreateUserInput, InputType) {}
Pick
Pick 은 해당 입력 유형해서 속성 집합을 선택하여 새로운 유형(클래스)를 생성한다.
@InputType()
export class UpdateEmailInput extends PickType(CreateUserInput, ['email'] as const) {}
즉, 쉽게 설명하면. 기존 형태에서 특정 필드만 꼭 골라쓰는 형태로 만들어준다는 이야기다.
Omit
Omit 는 입력 유형에서 모든 속성을 선택한다음 특정 필드만 제거하여 유형을 구성한다.
즉, Pick 과 반대이다.
@InputType()
export class UpdateUserInput extends OmitType(CreateUserInput, ['email'] as const) {}
위코드를 해석하면 CreateUserInput 에 모든 필드를 입력유형으로 사용하지만 email 필드만 제외한다 라는의미이다.
Intersection
두개의 Entity 를 하나의 타입으로 만들어 사용한다.
@InputType()
class CreateUserInput {
@Field()
email: string;
@Field()
password: string;
}
@ObjectType()
export class AdditionalUserInfo {
@Field()
firstName: string;
@Field()
lastName: string;
}
@InputType()
export class UpdateUserInput extends IntersectionType(CreateUserInput, AdditionalUserInfo) {}
Composition
@InputType()
export class UpdateUserInput extends PartialType(
OmitType(CreateUserInput, ['email'] as const),
) {}
위와같이 구성을 포함시켜 사용할 수 있다.
UpdateUserInput 타입에 있는걸 선택사항으로 만드는데 , 이중에 email 을 제외하고 선택사항을 만들겠다는 코드이다.
즉, 입력유형을 email필드를 제외한 것을 선택사항으로 하겠다 라는 의미이다.
반응형
'Development > Nest.js' 카테고리의 다른 글
[NestJS]Middleware 생성 및 사용 (0) | 2021.05.03 |
---|---|
[NestJS, GraphQL, typeORM]GraphQL Enum Column 생성 (0) | 2021.04.24 |
[NestJS] [TypeOrm] Active Record 패턴vs Data Mapper 패턴 (0) | 2021.04.13 |
[NestJS] Configuration 환경변수 설정 [@nestjs/config, cross-env, joi] (0) | 2021.04.10 |
[Nest.js][GraphQL] 기반 postgres DB 설치 (0) | 2021.04.10 |
Comments