← Back to NOTES 🌰
← Back to Effective TypeScript
← 아이템 52 - 테스팅 타입의 함정에 주의하기
핵심 요약
TypeScript는 초기에 JavaScript의 부족한 기능(클래스, 열거형, 모듈 등)을 독자적으로 구현했지만, ECMAScript가 발전하면서 호환성 문제가 발생했다. 현재는 TC39가 런타임 기능을, TypeScript 팀은 타입 기능만 발전시킨다는 원칙을 지키고 있다. 열거형, 매개변수 속성, 트리플 슬래시 임포트, 데코레이터는 타입 공간과 값 공간의 경계를 혼란스럽게 하므로 사용을 지양해야 한다.
자세한 내용
배경:
- 2010년경 JavaScript는 클래스, 데코레이터, 모듈 시스템 같은 기능이 부재
- 초기 TypeScript는 이러한 기능을 독립적으로 개발하여 포함
- 이후 TC39가 표준 기능으로 추가하면서 호환성 문제 발생
- TypeScript는 JavaScript 신규 기능을 그대로 채택하고 초기 버전과 호환성 포기를 선택
- 현재: TC39는 런타임 기능, TypeScript 팀은 타입 기능만 발전
피해야 하는 기능들:
1. 열거형(enum)
문제점:
- 상황에 따라 다르게 동작
- 숫자 열거형은 비트 플래그 구조 표현을 위해 설계되어 위험
- 상수 열거형(
const enum)은 런타임에 완전히 제거되며 예상치 못한 동작
- 문자열 열거형은 구조적 타이핑이 아닌 명목적 타이핑 사용
- JavaScript와 TypeScript에서 동작이 다름