Part6_TypeSciprtCompile
이효석
책 읽기

6장. 타입 스크립트 컴파일

6.1 자바스크립트의 런타임과 타입스크립트의 컴파일

6.1.1 런타임과 컴파일 타임

6.1.2 자바스크립트 런타임

  • JS 도 최적화를 위해 컴파일 타임을 거치지만 타입에 대한 컴파일은 따로 존재하지 않으므로 타입에 관련된 에러는 런타임에서 발생한다

6.1.3 타입스크립트 컴파일

  • TS 의 컴파일은 언어를 기계어로 변환하는 과정이 아니며, 고수준 언어인 TS 를 다른 고수준 언어인 JS 로 변환하는 과정이므로 트랜스파일이라고도 부른다. 그리코 컴파일러는 Source to source compiler 라 칭한다

TS의 컴파일 과정

  1. TS 소스를 TS AST 로 변경 (tsc)
  2. 타입 검사기가 AST 를 확인하여 타입을 체킹 (tsc)
  3. TS AST 를 JS 로 변환 (tsc)
  4. JS 를 JS AST 로 변환 (런타임)
  5. AST 를 바이트 코드로 변환 (런타임)
  6. 런타임에서 바이트 코드 평가 프로그램이 실행 (런타임)

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) 로 변환