Frontend/Nest.js

@InputType과 @ObjectType을 동시에 데코레이터 사용 시 주의할 점

wam 2024. 6. 21. 00:05

 

import { InputType, ObjectType } from 'type-graphql';

@InputType()
@ObjectType()
class Episode {
  // class fields and methods
}
  • 위 코드에 Episode 클래스는 동시에 @InputType()과 @ObjectType() 데코레이터가 적용되어 있다.
  • 이 경우, 자동으로 생성되는 SDL(Schema Definition Language)에서 이름 충돌이 발생할 수 있다.

 

 

type Episode {
  # fields defined by @ObjectType()
}

input Episode {
  # fields defined by @InputType()
}
  • SDL로 변환하면 자동으로 클래스 이름으로 type 또는 input 등의 타입들로 변환하는데, 이름이 고유해야 한다.
  • 같은 이름이 존재하기 때문에 에러가 발생하는 것이다.

 

 

해결 방법

import { InputType, ObjectType } from 'type-graphql';

@InputType('EpisodeInput', { isAbstract: true })
@ObjectType()
class Episode {
  // class fields and methods
}
  • @InputType에 중복되지 않는 이름으로 지정해 주면 된다.
  • { isAbstract: true } 추가
    • 클래스가 GraphQL 스키마에서 타입으로 직접 정의되지 않도록 하기 위한 설정