TypeScript 5.0 베타 훑어보기

배경

회사 프로젝트가 TypeScript 4.9를 사용 중인데, 5.0 베타 소식을 접했다. 메이저 버전 업이니만큼 breaking change와 새 기능들을 미리 파악해둘 필요가 있었다.

주요 변경사항

Decorator 정식 지원

그동안 experimentalDecorators 플래그로 사용하던 decorator가 드디어 Stage 3 표준으로 정식 지원된다. 기존 레거시 decorator와는 문법이 다르니 주의가 필요하다.

function logged(value: any, context: ClassMethodDecoratorContext) {
  return function(this: any, ...args: any[]) {
    console.log(`Calling ${String(context.name)}`);
    return value.call(this, ...args);
  };
}

class Calculator {
  @logged
  add(a: number, b: number) {
    return a + b;
  }
}

const Type Parameters

제네릭에 const 제약을 추가할 수 있게 되었다. 리터럴 타입을 보존해야 하는 경우 유용하다.

function makeConfig<const T>(config: T) {
  return config;
}

const config = makeConfig({ env: 'dev', port: 3000 });
// config.env는 'dev' 타입 (string이 아님)

enum 성능 개선

번들 크기 측면에서 enum이 더 효율적으로 컴파일된다고 한다. 기존에 enum 대신 union type을 쓰던 케이스도 재고해볼 만하다.

마이그레이션 고려사항

당장은 베타라 프로덕션 적용은 이르다. 하지만 decorator 사용 중인 코드베이스라면 정식 릴리즈 후 마이그레이션 계획을 세워야 할 것 같다. 특히 NestJS 같은 프레임워크를 쓴다면 영향이 클 것으로 예상된다.

5.1 정식 릴리즈는 3월 말~4월 초로 예상되니 그때 다시 검토 예정이다.