TypeScript 5.0 베타 - 데코레이터 표준화와 const 타입 파라미터

배경

팀 프로젝트가 TypeScript 4.9를 사용 중인데, 5.0 베타 소식을 접하고 변경사항을 검토했다. 특히 데코레이터와 제네릭 관련 개선이 눈에 띄었다.

주요 변경사항

1. ECMAScript 데코레이터

기존 실험적 데코레이터가 아닌 Stage 3 표준을 따르는 데코레이터가 구현되었다.

function log(target: any, context: ClassMethodDecoratorContext) {
  const methodName = String(context.name);
  return function(this: any, ...args: any[]) {
    console.log(`Calling ${methodName}`);
    return target.apply(this, args);
  };
}

class API {
  @log
  fetchData() {
    return fetch('/api/data');
  }
}

기존 experimentalDecorators와는 호환되지 않아, 당장 마이그레이션은 어려울 것 같다.

2. const 타입 파라미터

제네릭에서 as const 추론을 자동으로 해주는 기능이다.

// 기존 방식
function createConfig<T>(config: T) {
  return config;
}
const config = createConfig({ env: 'prod' } as const);

// 5.0
function createConfig<const T>(config: T) {
  return config;
}
const config = createConfig({ env: 'prod' }); // 자동으로 리터럴 타입

설정 객체나 상수 맵을 다룰 때 유용할 것 같다.

3. enum 개선

union enum으로 처리되는 케이스가 늘어나 타입 체킹이 더 정확해졌다.

마이그레이션 고려사항

  • 데코레이터 사용 중이면 breaking change 주의
  • Node 14.17 이상 필요 (현재 프로젝트는 16 사용중)
  • lib.d.ts 변경으로 일부 타입 에러 발생 가능

정리

정식 릴리즈는 다음 달 예상된다. const 타입 파라미터는 당장 유용할 것 같고, 데코레이터는 라이브러리들이 마이그레이션할 때까지 기다려야 할 것 같다. 베타 기간 동안 주요 라이브러리 호환성을 지켜봐야겠다.