TypeScript 7이 “isolated declarations” 기능과 함께 출시되었습니다. 이 컴파일러 모드는 대규모 모노레포가 파일을 병렬로 컴파일할 수 있게 하여 개발자 피드백 루프를 가속화합니다.
왜 지금 isolated declarations가 중요한가
이번 릴리스 전까지 TypeScript 컴파일러는 선언 파일(.d.ts)을 단일 스레드에서 처리했습니다. 수백 개의 패키지에 걸쳐 있는 코드베이스의 경우, 이 단계가 전체 빌드 파이프라인의 병목 현상을 일으키는 경우가 많았습니다. isolated declarations는 타입 체크 작업을 여러 코어에 분산함으로써, 모든 라이브러리를 하나의 저장소에 유지하는 팀의 빌드 시간을 대폭 단축합니다.
CI 작업을 실행하거나 빠른 로컬 재빌드가 필요한 조직은 즉각적인 효과를 체감할 수 있습니다.
병렬 타입 체크로 가는 길
Microsoft는 수년 전에 증분 컴파일(incremental compilation)을 추가했지만, 파일 간의 의존성 때문에 선언 단계는 여전히 순차적으로 유지되었습니다. 모노레포가 커짐에 따라 단일 스레드 방식은 비용이 많이 드는 병목 지점이 되었습니다. isolated declarations는 각 파일의 공개 인터페이스(public surface)를 독립적인 단위로 취급하고 이를 동시에 검증함으로써 의존성 체인을 끊어냅니다.
수혜자와 그렇지 않은 대상
- 대규모 모노레포를 사용하는 개발 팀 – 특히 멀티 코어 CPU를 사용하는 CI 에이전트에서 빌드 시간이 가장 크게 단축됩니다.
- 소규모 프로젝트 또는 단일 패키지 앱 – 선언 단계가 전체 컴파일 시간에서 차지하는 비중이 이미 매우 작기 때문에 이득이 미미할 수 있습니다.
- 사양이 제한된 하드웨어를 사용하는 팀 – 위와 같은 이유로 개선 효과가 미미할 수 있습니다.
TypeScript 7의 광범위한 업데이트 내용
isolated declarations는 다음과 같은 일련의 안정성 중심 업그레이드와 함께 도입되었습니다:
- Strict mode 개선 –
strictIndexSignatures와 같은 새로운 체크 기능은 코드가 존재하지 않을 수 있는 객체 키에 접근할 때 경고를 보냅니다. - Named tuple elements – 개발자가 튜플 위치에 이름을 붙일 수 있어 API 시그니처가 자체적으로 문서화됩니다.
- 강화된
satisfies연산자 – 복잡한 제네릭을 더 잘 처리하여 가독성을 해치지 않으면서도 타입 추론을 개선합니다. - Async context propagation – AsyncContext API 지원을 통해 비동기 호출 스택 추적을 돕습니다.
- Decorator metadata – TC39 제안에 따라 런타임 코드에서 클래스 데코레이터를 검사할 수 있습니다.
- 명시적 변성(variance) 어노테이션 – 제네릭 매개변수에
+또는-를 사용하여 공변성(covariance) 또는 반공변성(contravariance)을 나타냄으로써 타입 체크의 정확도를 높입니다.
이러한 추가 기능들은 "타입 우선(type-first)" 언어로서의 TypeScript의 명성을 강화하지만, isolated declarations는 코드베이스 규모에 따라 커지는 고질적인 문제를 직접적으로 해결하는 유일한 기능입니다.
향후 주목할 점
요약
isolated declarations는 모노레포를 주로 사용하는 팀에 더 빠른 빌드를 제공합니다. CI 사용 시간에 비용을 지불하거나 느린 로컬 재빌드로 어려움을 겪는 조직에게 TypeScript 7로의 업그레이드는 측정 가능한 시간 및 비용 절감으로 이어지는 저위험 선택입니다. 이번 릴리스의 나머지 기능들도 유용한 안전장치를 추가하지만, 병렬 타입 체크 엔진은 현대 JavaScript 개발의 확장성 문제를 직접적으로 해결하는 핵심 기능입니다.
