TS와 JS의 관계

많은 문서와, 웹 상의 여러 글들에서 타입스크립트는 다음과 같은 말로 정의됩니다.

타입스크립트는 자바스크립트의 슈퍼셋(Superset = 상위집합)이다.

이는 정확히 무엇을 의미할까요?

실제로 TS는 문법적으로 JS의 상위집합입니다.

기존에 JS였던 파일의 확장자를 TS로 바꾼다고 해서 동작이 불가능하다거나 하지 않습니다. 하지만, 거꾸로 TS였던 파일들에 대해서는 JS로 확장자를 바꿀 때 모든 경우에 동작한다고 보장할 수 없습니다.

타입스크립트는 정적 타입 시스템입니다.

기존 JS의 타입 체계는 동적입니다. 이러한 JS의 특징이 갖는 문제점은 바로 런타임 에러를 잡아내는 것이 쉽지않다는 것이죠. 타입 시스템의 목표 중 하나는 이러한 런타임 에러를 사전에 찾아내는 것입니다. 타입 스크립트가 정적 타입 시스템이라는 것은 바로 이 특징을 말하는 것인데, 그렇다고 해서 타입 체커가 모든 오류를 발견해낼 것이라고 보장할 수는 없죠.

기본적으로 타입스크립트에는 **타입 추론 (Type Inference)**이라는 것이 있어, 별도로 타입을 지정해주지 않더라도, 특정 변수의 타입이 명확한 경우에는 스스로 해당 타입을 정의해나갑니다. 이 덕분에 별도의 타입 구문 없이도 쓸만하지만, 직접 타입 구문을 추가해나간다면 훨씬 더 많은 오류를 사전에 잡아내고, 또 코드의 "의도"에 대해 타입스크립트에게 더 잘 전달해줄 수 있습니다.

'얼마나 엄격하게 작성할 것인가?'는 온전히 개발자의 몫입니다.

확장자가 .ts인 파일을 작성하더라도, 편의를 위해 any 타입을 반복적으로 사용하고, 그저 JS를 쓰듯이 문법을 작성해나간다면, 굳이 TS를 쓸 이유가 없습니다. 거꾸로 완전 엄격한 형태로 TS를 작성하고자 하는 것도 쉬운 일이 아니죠. 그만큼 작성해야 할 타입 구문의 양이 많아지게 됩니다. 결국 얼마나 엄격한 형태로 개발을 해나갈 것이냐에 대한 문제는 온전히 취향의 차이이며, 우열을 가릴 수도 없는 문제라고 할 수 있습니다.