타입스크립트는 또 다른 고수준 언어인 자바스크립트로 컴파일되며, 실행 역시 타입스크립트가 아닌 자바스크립트로 이루어집니다.
타입스크립트는 문법적으로도 자바스크립트의 상위집합입니다. 문법의 유효성과 동작의 이슈는 독립적인 문제입니다. 타입스크립트는 작성된 코드를 파싱하고 자바스크립트로 변환할 수 있습니다.
자바스크립트 파일이 .js(또는 .jsx) 확장자를 사용하는 반면, 타입스크립트 파일은 .ts(또는 .tsx) 확장자를 사용합니다. 타입스크립트는 자바스크립트의 상위집합이기 때문에 .js 파일에 있는 코드는 이미 타입스크립트라고 할 수 있습니다.
이러한 특성은 기존에 존재하는 js 코드를 ts로 마이그레이션하는데 엄청난 이점이 됩니다. 모든 js 프로그램이 ts라는 명제는 참이지만, 그 반대는 성립되지 않습니다.
function greet(who: string) {
console.log("Hello", who);
}
그러나 js를 구동하는 노드 같은 프로그램으로 앞의 코드를 출력하면 오류를 출력합니다.
: string
은 ts에서 쓰이는 타입 구문입니다. 타입 구문을 사용하는 순간부터 js는 ts 영역으로 들어가게 됩니다.
ts 컴파일러는 ts 뿐만 아니라 js 프로그램에도 유용하다.
let city = "new york city"
console.log(city.toUppercase());
이 코드를 실행하면 다음과 같은 오류가 발생합니다.
TypeError: city.toUppercase is not a function
타입 시스템의 목표 중 하나는 런타임에 오류를 발생시킬 코드를 미리 찾아내는 것입니다. 타입스크립트가 ‘정적’ 타입 시스템이라는 것은 바로 이런 특징을 말하는 것입니다.
타입스크립트는 타입 구문 없이도 오류를 잡을 수 있지만, 타입 구문을 추가한다면 훨씬 더 많은 오류를 찾아낼 수 있습니다. 코드의 ‘의도’가 무엇인지 타입 구문을 통해 타입스크립트에게 알려줄 수 있기 때문에 코드의 동작과 의도가 다른 부분을 찾을 수 있습니다.