제발, 이 에러는 그만 줘!

신연우·2021년 4월 15일
2

우리 조금 전에도 보지 않았었나?

Type Graphql로 개발을 하면서 npm start 스크립트를 통해 서버를 켤 때마다 항상 긴장하고 있다.

항상 개발을 조금만 수정하면 만나게 되는 에러 메시지가 있기 때문이다.

Error: Unable to infer GraphQL type from TypeScript reflection system. You need to provide explicit type for ...

이 에러 메시지는 내가 이 시리즈에서 2번째로 작성한 글에서 설명했듯이 해당 서비스를 개발하면서 처음 만난 에러이자 가장 많이 만나고 있는 에러이다.

물론 내 기술적인 지식이 부족해서 생기는 에러기 때문에 뭐라 할 말은 없지만, 처음 만나게 되면 정말 일일이 다 체크하게 된다.

사실 이 에러가 나는 이유는 근본적으로 하나고, 경우는 3가지 정도가 있다. 지금까지 개발을 해오면서 알게 된 케이스를 소개하도록 하겠다.

결론은 type을 잘못 지정했다는 것이다!

이 에러는 틀림없이 type을 잘못 지정했기 때문에 생기는 것이다. 내가 처음 이 에러를 만난 것도 type은 아니지만 결국 반환 type을 잘못 적은 것이기 때문에 생긴 에러였기에 결론은 type 지정이다.

그렇다면 대체 어떤 경우가 type miss가 발생하는 것일까? 경우는 다음과 같다.

  1. 배열
  2. nullable
  3. Resolver return type missing

3번은 전에 이미 한 번 소개했기 때문에 1, 2번에 대해 설명하도록 하겠다.

@Field()
tags: string[];

위와 같은 상황에서는 에러가 발생한다. 그 이유는 기본적으로 @Field 데코레이터에 type과 nullable을 지정해주지 않아 string[] | null 타입과 맞지 않기 때문이다.

@Field(type => [String], { nullable: true })
tags: string[] | null;

위와 같이 변경하면 해결할 수 있다.

결론

@Field() 데코레이터가 지정된 타입에 맞춰 자동으로 타입을 캐스팅해주기는 하지만 배열의 경우와 nullable의 경우는 맞춰주지 않는다.

또한, @Query() 혹은 @Mutation() 데코레이터는 반드시 반환 타입을 지정해야 한다.

이 경우만 잘 확인하면 이 에러는 쉽게 해결할 수 있을 것이다.

profile
남들과 함께하기 위해서는 혼자 나아갈 수 있는 힘이 있어야 한다.

0개의 댓글