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 스키마에서 타입으로 직접 정의되지 않도록 하기 위한 설정