
타입스크립트는 자바스크립트로 컴파일되는, 자바스크립트의 타입이 있는 superset이다.
타입스크립트는 자바스크립트와 다르게 브라우저에서 실행하기 위해 파일을 한 번 변환해줘야 한다.
“타입스크립트 언어의 문법에 맞춰 작성된 소스 코드”를 “자바스크립트 런타임 환경에서 실행 가능한 코드”로 변환시켜준다.
이렇게 변환시켜주는 행위를 컴파일(compile) 혹은 트랜스파일(transpile)이라고 부른다.
이렇게 변환시켜주는 행위를 하는 프로그램을 컴파일러(타입스크립트 컴파일러)라고 부른다.
이런 컴파일 과정이 필요하기 때문에 타입스크립트를 컴파일 언어(compiled language)라고 부른다.
자바스크립트는 별도의 컴파일 과정 없이 바로 실행이 가능하기 때문에 인터프리터 언어(interpreted language)라고 부른다.
"타입스크립트 언어의 문법에 맞춰 작성된 소스 코드" 를 "자바스크립트 런타임 환경에서 실행 가능한 코드" 로 변환시켜 주는 행위를 하는 시점(순간)을 컴파일 타임이라고 한다.
컴파일된 결과물이 실행되는 시점(순간)을 런타임이라고 한다.
정적 타이핑은 컴파일 타임에 타입 체크를 하기 때문에 미리 오류를 발견할 수 있다.
이를 통해 암묵적 형변환, 호이스팅 등 기존 자바스크립트의 문제를 해결할 수 있다.
정적 타이핑과 동적 타이핑의 가장 큰 차이점은 에러 검출 시점이다. 컴파일 시에 에러를 검출하느냐, 런타임 시에 에러를 검출하느냐의 차이다.
자바스크립트는 동적 타입 언어이기 때문에 데이터 타입이 런타임에 결정된다. 즉 코드가 실행되기 전 까지는 데이터 타입을 알 수 없으며, 이는 곧 개발자의 의도와 다르게 동작하거나 에러가 발생할 수 있음을 의미한다. 이런 동작은 프로젝트 규모가 커질수록 아주 큰 걸림돌이 된다.
반면 정적 타입 언어에서는 프로그램의 예상 동작을 타입을 통해 나타내고, 그 예상에 걸맞게 동작할 지의 여부를 타입 검사기(type checker)를 통해 실행 전에 확인할 수 있다.
정적 타입 언어로써 타입스크립트의 장점은 다음과 같다.
정적 타입 시스템은 프로그램이 실제로 실행되기 전에 상당수의 오류를 잡아낼 수 있다.
변수의 타입이 지정되어 있는 경우 코드 편집기에서 해당 타입에 대한 신뢰도 높은 추천 결과를 미리 보기로 띄워줄 수 있다.
타입은 개발자의 의도를 기술하는 주석과 같은 역할을 한다. 이 때 타입은 보통의 주석에 비해 더 강력한데, 타입 검사기에 의해 검사 및 강제되므로 프로그램의 동작과 일정 수준 이상 괴리될 수 없기 때문이다.
타입 정의와 다르게 동작하는 프로그램은 실행 자체가 불가능하다는 점에서 타입은 주석이나 변수명보다 훌륭한 명세 수단으로 동작한다.
인터페이스, 제네릭 등과 같은 강력한 객체지향 프로그래밍 지원은 크고 복잡한 프로젝트의 코드 기반을 쉽게 구성할 수 있도록 도우며, 클래스 기반 객체지향 언어에 익숙한 개발자들이 자바스크립트 프로젝트를 수행하는 데 진입 장벽을 낮춘다.