TypeScript 3.9 배포와 주요 개선사항 정리
배경
5월 12일에 TypeScript 3.9가 정식 배포되었다. 재택근무 중이라 팀원들과 논의 후 회사 프로젝트에 바로 적용해봤다.
주요 변경사항
1. 빌드 속도 개선
가장 체감되는 부분이었다. @ts-expect-error 주석이 추가되어 의도적인 타입 에러 처리가 명확해졌다.
// 기존: @ts-ignore (너무 광범위)
// @ts-ignore
const result = legacyAPI();
// 개선: @ts-expect-error (에러 없으면 경고)
// @ts-expect-error
const result = legacyAPI();
레거시 코드 마이그레이션 중 매우 유용했다. 실제로 에러가 없으면 주석 자체를 경고해주기 때문에 불필요한 주석을 제거할 수 있었다.
2. Promise 타입 체크 강화
조건문에서 Promise를 잘못 사용하는 케이스를 잡아낸다.
async function checkUser(id: string) {
const user = await fetchUser(id);
// 3.9 이전: 경고 없음
// 3.9 이후: 에러 발생
if (fetchUser(id)) {
// await 빼먹은 실수를 잡아줌
}
}
실제로 팀원 코드에서 이런 버그를 2건 발견했다. 프로덕션 배포 전에 잡을 수 있어서 다행이었다.
3. CommonJS Auto-Import 개선
VSCode에서 자동 임포트할 때 CommonJS와 ES Module을 더 정확하게 구분한다. Express 같은 라이브러리 사용 시 import 구문이 더 정확해졌다.
마이그레이션
npm install -D [email protected]
큰 breaking change는 없었다. 컴파일 에러 3건 정도 수정하면 끝났다. 대부분 Promise 체크 강화로 인한 실제 버그였다.
소감
빌드 속도가 체감상 10~15% 정도 빨라진 것 같다. @ts-expect-error는 앞으로 자주 쓸 것 같다. 안정적인 릴리즈였다.