준수하면 좋을 규칙
- 가장 최신 자바스크립트 문법과 기능 사용하기(esnext)
- 가능하면 스프레드를 활용하여 자료구조를 불변으로 만들기
- 모든 것에 타입을 붙이고, 가능하면 구체적인 타입으로 추론될 수 있게 하기.
명시적 타입을 너무 남용하지 않기. - 재사용할 수 있는 범용 코드를 만들려 노력하기 (다형성)
자바스크립트에는 포인터나 참조가 없다. 그 대신 값과 참조 타입을 사용한다.
값은 불변이다. (문자열, 숫자, 불)
참조는 보통 가변이다. (배열과 객체 같은 자료구조나 함수)
타입스크립트는 더 안전한 프로그램을 구현할 수 있게 한다.
안전한은 타입 안정성이다. 타입을 이용해 프로그램이 유효하지 않은 작업ㅇ르 수행하지 않도록 방지한다
자바스크립트는 명백히 잘못된 동작임에도 넘어가곤 한다.
자바스크립트는 프로그램을 실행할 때 실수를 알려준다.
타입스크립트는 편집기에 코드를 입력하는 순간 에러를 알려준다.
2.1 컴파일러
프로그램의 실행 과정
- 프로그램이 컴파일러에 의해 AST로 파싱된다.
- AST가 바이트코드로 컴파일된다.
- 런타임이 바이트코드를 평가한다.
타입스크립트는 컴파일러가 코드를 자바스크립트 코드로 변환한다.
타입스크립트 컴파일러는 AST를 만들어 결과 코드를 내놓기 전에 타입 확인을 거친다.
TSC의 수행
- 타입스크립트 소스 -> 타입스크립트 AST
- 타입 검사기가 AST를 확인
- 타입스크립트 AST-> 자바스크립트 소스
자바스크립트 런타임의 수행 (브라우저, NodeJS, 기타 자바스크립트 엔진)
- 자바스크립트 소스 -> 자바스크립트 AST
- AST -> 바이트보드
- 런타임이 바이트코드를 평가
개발자가 기입한 타입 정보는 최종적으로 만들어지는 프로그램에는 아무런 영향을 주지 않는다.
2.2 타입 시스템
어떤 타입을 사용하는지를 컴파일러에 명시적으로 알려주는 타입 시스템
자동으로 타입을 추론하는 타입 시스템
타입스크립트는 두 가지 시스템 모두의 영향을 받았다.
어노테이션을 생략해도 타입스크립트는 타입 추론을 할 수 있다.
1. 타입스크립트 vs. 자바스크립트
타입 시스템 기능 | 자바스크립트 | 타입스크립트 |
타입 결정 방식 | 동적 | 정적 |
타입이 자동으로 변환되는가? | O | X(대부분) |
언제 타입을 확인하는가? | 런타임 | 컴파일 타임 |
언제 에러를 검출하는가? | 런타임(대부분) | 컴파일 타임(대부분) |
동적 타입 바인딩은 프로그램을 실행해야만 특정 데이터의 타입을 알 수 있다.
타입스크립트는 점진적으로 타입을 확인한다.
자바스크립트는 약한 타입 언어다. 암묵적 변환을 제공한다.
이는 문제의 원인을 추적하기 어렵다.
자바스크립트는 런타임에 예외를 던지거나 암묵적 형변환을 수행한다.
타입스크립트는 컴파일 타임에 문법 에러와 타입 관련 에러를 모두 검출한다.
2.3 코드 편집기 설정
TSC 자체도 타입스크립트로 구현된 명령행 도구이므로 TSC를 실행하려면 NodeJS가 필요하다.
1. tsconfig.json
모든 타입스크립트 프로젝트는 루트 디렉터리에 이 파일이 존재해야 한다.
어떤 파일을 컴파일하고, 어떤 자바스크립트 버전으로 방출하는지 등을 정의한다.
include | TSC가 타입스크립트 파일을 찾을 디렉터리 |
lib | TSC가 코드 실행 환경에서 이용할 수 있다고 가정하는 API (dom 등) |
module | TSC가 코드를 컴파일할 대상 모듈 시스템 |
outDir | 생성된 자바스크립트 코드를 출력할 디렉터리 |
strict | 이 옵션을 이용하면 엄격한 검사를 수행한다. |
target | TSC가 코드를 컴파일할 자바스크립트 버전 |
2. tslint.json
TSLint를 사용하면 일관된 코딩 스타일을 사용할 수 있다.