6장. 타입 스크립트 컴파일
6.1 자바스크립트의 런타임과 타입스크립트의 컴파일
6.1.1 런타임과 컴파일 타임
6.1.2 자바스크립트 런타임
- JS 도 최적화를 위해 컴파일 타임을 거치지만 타입에 대한 컴파일은 따로 존재하지 않으므로 타입에 관련된 에러는 런타임에서 발생한다
6.1.3 타입스크립트 컴파일
- TS 의 컴파일은 언어를 기계어로 변환하는 과정이 아니며, 고수준 언어인 TS 를 다른 고수준 언어인 JS 로 변환하는 과정이므로 트랜스파일이라고도 부른다. 그리코 컴파일러는 Source to source compiler 라 칭한다
TS의 컴파일 과정
- TS 소스를 TS AST 로 변경 (tsc)
- 타입 검사기가 AST 를 확인하여 타입을 체킹 (tsc)
- TS AST 를 JS 로 변환 (tsc)
- JS 를 JS AST 로 변환 (런타임)
- AST 를 바이트 코드로 변환 (런타임)
- 런타임에서 바이트 코드 평가 프로그램이 실행 (런타임)
6.2 타입스크립트 컴파일러의 동작
6.2.1 코드 검사기로서의 타입스크립트 컴파일러
- TSC 는 컴파일 타임에서 문법 오류 및 타입 에러를 잡아낸다
6.2.2 코드 변환기로서의 타입스크립트 컴파일러
- TS 컴파일러는 타입 검사 후, TS 코드를 구버전의 JS 로 트랜스 파일한다 (TSC 설정을 통해 타겟 ES 레벨을 선택할 수 있다)
- TS 컴파일러는 타입 오류가 있어도 일단 컴파일을 진행
- 즉, 타입 에러가 발생해도 실행되는 JS 는 확보해야 하므로 트랜스 파일을 진행하고, JS 런타임에서 타입에 관한 버그가 발생
- 컴파일 타임에서는 JS 는 결국 TS 의 언어를 이해하지 못하므로 모든 인터페이스, 타입, 타입 구문이 제거 된다
6.3 타입스크립트 컴파일러의 구조
6.3.1 프로그램(Program)
- tsconfig.json 의 설정값에 따라 컴파일을 수행
6.3.2 스캐너
- TS 파일을 어휘적으로 분석하여 토큰을 생성
6.3.3 파서
- 스캐너가 만든 토큰을 AST 를 생성
6.3.4 바인더
- 체커 단계에서 타입 검사를 할 수 있는 기반을 만드는 과정
- 타입 검사를 위한 심볼 데이터를 생성하고, 해당 심볼 데이터를 AST 노드에 연결한다
6.3.5 체커와 이미터(Emitter)
체커
- AST 노드를 탐색하면서 심볼 정보를 불러와서 타입 검사를 수행
이미터
- TS 소스를 JS 파일과 타입 선언 파일(d.ts) 로 변환