타입스크립트 꽝꽝

[TypeScript] 에러 TS2589: Type instantiation is excessively deep and possibly infinite 해결하기

bimppap 2022. 2. 18. 10:36

2022년 2월 18일의 버전 정책을 기반으로 쓰인 글입니다 :3

 

typeorm을 통해 레포에 도메인 정보를 저장하려는데 위와 같은 에러가 떴다.

 

잘 되던 코드가 갑자기 안 되는 거였기에 코드를 잘못 짠 줄 알고 계속 살펴봤지만 찾을 수 없었다;;

결국 타입스크립트가 또? 하면서 언어 탓하는 나쁜 개발자 마인드가 되었는데...

이번엔 정말로 타입스크립트가 타입스크립트한 거였다 🙄

 

결론부터 말하자면 타입스크립트의 버전 문제였고, 버전을 낮추면서 해결되었다.

 

에러가 날 당시 프로젝트의 typeorm과 typescript 버전은 다음과 같았다.

package.json 일부

 

검색해보니 typeorm 깃허브에 관련 버그 이슈가 있었다. (당시 typescript 버전 3.6.x)

 

TypeORM thwors “Type instantiation is excessively deep and possibly infinite.ts(2589)” error on Repository typing · Issue #

After update to VSCode August 2019 (version 1.38) and Typescript 3.6 i'm getting a lot of the fallowing error on a TypeORM repository initialization. Type instantiation is excessively deep and ...

github.com

 

뿐만 아니라 react-i18next 에서도 같은 문제가 발생하고 있었다.

 

`TS2589: Type instantiation is excessively deep and possibly infinite.` with Typescript 4.5.2 and react-i18next 11.14.3 · Issue

🐛 Bug Report Using a <Trans> component with a lot of namespaces trigger the following typescript error: TS2589: Type instantiation is excessively deep and possibly infinite. The error starts ...

github.com

 

두 이슈 모두 typescript 4.5.x 버전이 문제를 일으키고 있어 하향하거나 다른 옵션을 택하는 것으로 문제를 해결했다.

typeorm의 경우 타입스크립트 버전을 3.4.3으로 낮추면서 해결이 되었다.

react-i18next의 경우 타입스크립트 버전이 4.5.2일때 같은 오류를 일으켰으나 4.5.5이 되면서 이슈가 해결되었다.

(그런데 왜 typeorm은 아직도...)

 

typeorm 이슈가 2019에 거론되었으니 혹시나 싶어 버전을 조금씩 높여가면서 확인해보았는데 타입스크립트 3.9.10 버전을 넘어가면 상단의 에러가 떴다.

 

타입스크립트 4.x.x 버전도 업데이트하면서 수정되겠지만 당분간은 해당 버전으로 이용해야겠다.