문제 상황
tsconfig.json
에서 설정한 typeRoots
설정이 tsc
에서는 올바르게 동작하지만, ts-node
에서는 타입을 참조하는데 문제가 있는 경우입니다.
해결 방법
--files
옵션 이용하기
첫번째 방법은 --files
옵션을 이용하는 것입니다.ts-node --files src/server.ts
와 같이 --files
옵션을 사용하면 ts-node
에서도 정상적으로 typeRoots
에서 타입이 정의된 파일들을 불러와 실행시킬수 있습니다. 아래는 package.json
에서 script
에 적용한 예시입니다.
1 | { |
추가적으로, ts-node
는 files
, include
, exclude
를 기본적으로 이용하지 않도록 설정되어있습니다. 따라서 앞서 말한 옵션들 또한 이용하려면 --files
플래그를 이용하거나 TS_NODE_FILES=true
로 설정해야합니다. 자세한 정보는 ts-node
의 깃허브 README를 참고해주세요.
Triple-Slash Directives
1 | /// <reference path="./types/user.d.ts" /> |
두번째 방법은 typeRoots
를 사용하지 않고 /// <reference path="./types/user.d.ts" />
와 같이 Triple-Slash Directives를 이용하는 방법입니다.Triple-Slash Directives
는 반드시 소스파일 최상단에 위치해야합니다.
결론
저는 ts-node
를 개발환경에서만 이용하기 때문에 개발환경에서는 첫번째 방법인 --files
를 이용하고 프로덕션 환경에서는 빌드한후 배포합니다.