-
런타임 기능으로 자바스크립트 구문을 확장하는 방식은 나쁜 사례로 간주한다.
- 런타임 구문 확장이 최신 자바스크립트 구문과 충돌할 수 있기 때문
- 트랜스파일러의 복잡성 증가
-
타입스크립트에서는 3가지 구문 확장 기능을 제공함. -> 유감
- 클래스 - 매개변수 속성을 제외하고 ts의 클래스는 js 클래스와 거의 동일하게 동작함.
- enum - 프로젝트에서 종종 사용됨.
- 네임스페이스 - 사실상 새로운 프로젝트는 더 이상 네임스페이스를 사용하지 않음
-
클래스
- 타입스크립트는 매개변수 속성을 선언하기 위한 단축 구문을 제공
- 속성은 클래스 생성자의 시작 부분에 동일한 타입의 멤버의 속성으로 할당됨.
class Engineer{ constructor(readonly area : string){ console.log("I work inthe ${area} area.") } } -> new Engineer("mechanical").area == "mechanical"
-
실험적인 데코레이터
- [[자바스크립트 데코레이터 이해하기]]
- experimentalDecorators 컴파일 옵션 제공
- 타입스크립으의 데코레이터 지원은 실험적이고 ECMA스크립트가 제안하는 최신 초안과 일치하지 않음
-
enum 열거형
- 각 값에 대해 친숙한 이름을 사용한 객체에 저장된 리터럴 값 집합
- 자주 반복되는 리터럴 집합이 있고, 그 리터럴 집합을 공통 이름으로 설명할 수 있으며, 열거형으로 전환했을 때 읽기 쉽지 않은 경우라면 열거형을 사용해서는 안됨
- 타입스크립트에는해당 객체의 값 중 하나여야 함을 나타내는 타입 시스템 방법이 없음 -> 열거형 같은 객체를 사용할 때 까다로움
- 컴파일된 자바스크립트에서 열거형은 상응하는 객체로 컴파일됨
-
자동 숫잣값
- 열거형의 멤버는 명시적인 초깃값을 가질 필요가 없다. -> 값이 생략되면 타입스크립트는 첫 번째 값을 0으로 시작하고 각 후속 값을 1씩 증가시킴
- 명시적인 값을 갖지 않는 모든 멤버는 이전 값보다 1 더 큰 값을 갖는다.
enum Direction{ TOP, // 0 Right, //1 Bottom, //2 Left //3 }
-
문자열 값을 갖는 열거형
- 멤버로 숫자대신 문자열을 사용할 수 있다.
- 문자열 값은 열거형으로 읽기 쉬운 이름으로 공유 상수의 별칭을 지정하는데 유용하다.
- 문자열 값을 갖는 멤버 뒤에 오는 멤버의 값이 없으면 오류를 발생시킴 -> 자동 숫잣값이 생성되지 않기 때문
-
const 열거형
- 타입스크립트는 const 제한자로 열거형을 선언해 컴파일된 자바스크립트 코드에서 객체 정의와 속성 조회를 생략하도록 지시함
- preserveConstEnums 컴파일 옵션
-
네임스페이스
- ECMA스크립트 모듈이 승인되기 전에 사용 하던 것
- 하나의 파일 출력을 위해 만들어진 프로젝트에는 코드 영역과 전역 변수를 구성하는 방법이 필요했음. -> 타입스크립트에서는 namespace로 해결
- namespace는 전역으로 사용이 가능한 객체. 그 내부에서 내보낼 수 있는 컨텐츠를 정의함.
namespace Settings{ export const name = "my name"; export const version = "1.2.3"; }
- 네임스페이스로 구조화된 타입스크립트 코드는 웹팩과 같은 최신 빌더에서 사용하지 않는 파일을 제거하는 것이 쉽지 않음 -> ECMA스크립트의 모듈 처럼 파일간에 명시적으로 선언되는 게 아니라 암시적으로 연결을 생성하기 때문
-
타입 전용 export import
- 바벨과 같은 타입스크립트 외부의 트랜스파일러에 명확하게 코드의 일부가 제거될 수 있음을 알림
- 바벨과 같은 트랜스 파일러는 각 이름이 타입 시스템에서만 사용되는지 여부를 알 수 있는 타입 시스템에 접근할 수 없음