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는 앞으로 자주 쓸 것 같다. 안정적인 릴리즈였다.

TypeScript 3.9 배포와 주요 개선사항 정리