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 타입 파라미터는 당장 유용할 것 같고, 데코레이터는 라이브러리들이 마이그레이션할 때까지 기다려야 할 것 같다. 베타 기간 동안 주요 라이브러리 호환성을 지켜봐야겠다.