스크랩
TypeScript 7 업그레이드, 막막하셨나요? tsconfig 마이그레이션을 자동화하는 'ts6to7'을 소개합니다

핵심 요약
TypeScript 7이 정식 릴리스되었습니다. Go로 재작성된 네이티브 컴파일러(tsgo) 덕분에 약 10배 빠른 컴파일 속도를 자랑하지만, 그만큼 파괴적인 변경도 많습니다. TS5/6에서 deprecated였던 컴파일러 옵션이 전부 제거되었고, strict 기본값도 true로 바뀌어서 오래된 tsconfig를 가진 프로젝트는 그냥은 업그레이드가 되지 않습니다.
이 기계적이고 번거로운 마이그레이션 작업을 자동화해주는 codemod 도구, ts6to7이 GeekNews에 공개되어 소개합니다.
사용법은 단 두 줄
npx ts6to7 --dry # 미리보기 (아무것도 쓰지 않음)
npx ts6to7 # 실제 적용
--dry 옵션으로 변경 사항을 먼저 확인할 수 있어서, 기존 프로젝트에 부담 없이 시험해볼 수 있습니다.
ts6to7이 해주는 일
- tsconfig.json을 제자리에서 수정*:
jsonc-parser로 편집하기 때문에 기존 주석과 포맷이 그대로 유지됩니다. - 제거된 옵션을 TS7 등가물로 자동 변환:
target: es5→ES2015module: umd/amd→ESNextmoduleResolution: node→NodeNext/BundlerimportsNotUsedAsValues→verbatimModuleSyntax
- baseUrl을 paths로 폴딩
- typescript 의존성을
^7.0.0으로 범프 - strict 처리도 신중하게:
strict가 미설정이었다면 기존 동작을 유지하도록false로 고정합니다. 단,extends로 다른 config를 상속하는 파일은 베이스 config가 이미strict를 설정했을 수 있으므로 건드리지 않고 경고만 출력합니다. - 수동 확인 필요 체크리스트 제공: ES5 전용 런타임,
ts-node/ts-jest같은 구 컴파일러 API 기반 도구,types배열 누락 등 안전하게 자동 변환할 수 없는 항목은 파일 단위로 스코프된 체크리스트로 알려줍니다.
TypeScript 5에서도 바로 이관 가능
주목할 점은 TS6을 거치지 않고 TS5에서 바로 TS7로 이관할 수 있다는 것입니다. TS5 시절 옵션인 ignoreDeprecations, 프로젝트 레퍼런스의 prepend도 함께 정리해줍니다. 모노레포 환경도 지원해서 모든 패키지를 한 번에 스캔합니다.
마치며
현재 버전은 0.2.0으로 아직 초기 단계입니다. 만약 tsconfig가 잘못 변환되는 케이스를 발견하면, 해당 tsconfig를 첨부해서 GitHub 저장소(zi-gae)에 이슈로 제보하면 프로젝트에 큰 도움이 됩니다.
TypeScript 7의 압도적인 컴파일 속도가 탐났지만 낡은 tsconfig 때문에 망설였다면, npx ts6to7 --dry로 부담 없이 시작해보세요.