💡 타입스크립트는 ‘Javascript’의 언어에서 파생되어서 나온 언어입니다. 그렇기에 ‘Typescript’를 이해하기 위해서는 ‘Javascript’ 언어에 대한 이해는 필수적입니다.
💡 타입 스크립트는 Microsoft에서 개발하고 유지/관리되는 Apache 라이센스가 부여된 오픈 소스입니다. 타입 스크립트(Typescript)는 자바스크립트의 슈퍼셋(Superset)이며, 자바스크립트에 ‘타입'을 부여한 언어입니다.
💡 슈퍼셋(Superset)이란?
슈퍼셋은 상위 집합을 의미합니다. 다시 말해서 모든 자바스크립트 프로그램은 이미 타입 스크립트 프로그램이며, 반대로 타입 스크립트는 별도의 문법을 가지고 있기 때문에 유효한 자바스크립트 프로그램이 아닙니다.
💡 타입이란?
기본형 타입(단일 타입)으로는 7가지(string, number, boolean, null, undefined, symbol, bigint)와 유니온 타입(다중 타입, =교집합)과 인터섹션 타입(다중 타입, =합집합), 옵셔널 타입 등과 같은 타입을 변수, 파라미터, 함수에 부여한 것을 의미합니다.

Typescript는 ES5, ES6, ES7 등의 슈퍼셋이므로 새로운 기능들을 사용하기 위해 Babel과 같은 트랜스파일러(Transpiler)를 사용하지 않아도 ES5, ES6, ES7 등의 새로운 기능들을 기존의 Javascript 엔진(Node.js 등)에서 실행 할 수 있다.
타입스크립트는 코드를 컴파일을 필요로 정적인 언어이며, 타입을 명시하기때문에 사전에 에러를 검출하는 것이 가능합니다.
function sum(a, b) {
return a + b;
}
sum('1', '2'); // '12'
위의 덧셈 함수는 1 + 2를 의도했을테지만, 자바스크립트의 경우 타입이 명시적이지 않기 때문에 동적 타이핑(Dynamic Typing)에 의하여 숫자 3이 아닌 문자열 '12'를 출력합니다. 즉, 개발자가 의도하지 않은 값이 나올 수 있으며 디버깅이 어렵게 됩니다.
function sum(a: number, b: number) {
return a + b;
}
sum('1', '2');
// Argument of type '"1"' is not assignable to parameter of type 'number'
반면 타입스크립트의 경우 타입을 number라고 명시했기때문에 문자열이 들어간다면 컴파일 단계에서 사전에 오류를 포착할 수 있습니다. 명시적인 정적 타입 지정은 개발자의 의도를 명확하게 기술하여 코드 가독성을 높이고 디버깅을 쉽게 할 수 있도록 합니다.
타입스크립트의 또 다른 장점은 코드를 작성할 때 개발 툴의 기능을 최대로 활용할 수 있다는 것입니다. 요즘에 프런트엔드 개발을 할 때 가장 많이 사용되는 Visual Studio Code는 툴의 내부가 타입스크립트로 작성되어 있어 타입스크립트 개발에 최적화 되어 있습니다.
타입 스크립트는 ES6에서 새롭게 사용된 문법을 포함하고 있으며 클래스, 인터페이스, 상속, 모듈 등과 같은 객체 지향 프로그래밍 패턴을 제공하여 객체 지향 언어와 같이 구성이 가능합니다.
'Typescript'를 사용하게 되면 빠르게 개발을 하는데에 있어서 구조를 구성해야 하기 때문에 시간이 오래 걸릴 수 있고, 추가적인 문법을 이해해야 하는데 시간이 소요됩니다. 그리고 개발 취향이 있기에 'Typescript'가 정답이다라고 판단을 할 수는 없지만 'Javacript'의 가장 큰 단점으로 꼽히는 문제로 타입의 불안정성에 대해서 보장해주는 점과 추후 발생할 수 있는 오류에 대해서 줄여준다는 점에서 높게 평가된다고 생각합니다. 각각의 상황을 판단하여서 도입을 하면 좋을 것 같습니다.