JavaScript는 일반적으로 Interpreted 또는 Just-In-Time(JIT)언어로 분류되는데 전통적인 컴파일 언어와 다르게 작동 된다.
때문에 일반적으로 사용하기에 언어가 쉽고 실행도 쉬워 입문용 언어로 많이 사용한다.
하지만 내부 동작을 이해하고 사용하기에는 쉬운 언어라고 생각은 들지 않는다.
let, const와 같은 변수 선언 키워드를 사용하여 선언한다. 그럼 변수의 타입은 어떻게 지정되는가?다른 특징도 존재하는데 예시를 보자
undefined값을 할당한다.const add = (num1, num2) => {
return num1+num2
}
위와 같은 함수가 있다.
함수를 실행할 때,

이렇게 실행을 한다면
에러가 발생할까?
정답은 발생하지 않는다.

이처럼 정상적으로 실행된느 것을 볼 수 있다.
적어도 3번째 실행은 6의 결과 값을 기대하고 사용한 것일 수 있다.
이런식으로 에러 발생지점을 알 수 없고 직접 찾아야만 하며
함수의 매개변수에 인자값을 주지 않더라도 자바스크립트는 undefined라는 값을 할당함으로써 에러를 발생시키지 않는다.
JS는 위와 같은 특징으로 인해 대규모 프로젝트나 개발자가 많은 프로젝트에서는 진행하거나 유지보수 하는데 있어서 매우 힘들다는 점이 있다.
TypeScript를 도입하면 위와 같은 문제들을 해결할 수 있다.
| 특징 | 자바스크립트 | 타입스크립트 |
|---|---|---|
| 타입 시스템 | 동적 타이핑 (타입 추론) | 정적 타이핑 (명시적 타입 정의) |
| 컴파일 | 인터프리터 언어 (실행 시간에 타입 체크) | 컴파일 언어 (컴파일 시간에 타입 체크) |
| 학습 곡선 | 쉬움 (더 광범위하게 사용됨) | 보통 (자바스크립트 지식이 필요함) |
| 코드 안정성 | 낮음 (동적 타이핑으로 인해 런타임 오류 발생 가능) | 높음 (정적 타이핑으로 컴파일 시간에 오류 발견) |
| 도구 지원 | 좋음 (다양한 편집기 및 도구 지원) | 매우 좋음 (자바스크립트의 도구에 추가적인 타입 체크 및 자동 완성 기능) |
| 브라우저 호환성 | 바로 실행 가능 | 컴파일 후 자바스크립트로 변환되어 실행 |
| 사용 사례 | 웹 개발, 서버 사이드 스크립트, 프론트엔드/백엔드 개발 | 대규모 애플리케이션, 엔터프라이즈급 개발, 프론트엔드/백엔드 개발 |
위의 자바스크립트에서의 함수 실행을 같은 케이스로 봐보자.

.js --> .ts로 바꿔주기만해도 일단 함수 매개변수 부분에서 에러가 난 것을 확인할 수 있었다.
기존에는
1. 런타임에서 확인할 수 있음.
2. 직접 에러를 찾아야 한다.
였지만 타입 스크립트를 사용한다면
실행 전에 내가 고려한, 예상한 상황에 맞지 않을 경우에는 잘못된 코드를 확인할 수 있다.
물론 자바스크립트와 같이 1+'2'와 같은 데이터 자체의 자동 형변환이나 그런 것들은 차이점이 없다.
자바 스크립트는 동적인 언어라면 타입스크립트는 정적인 언어가 되어 최대한 예상한 상황이 만들어지도록 도와주며 남들이 보더라도 내가 사용한 변수나 함수들이 어떠한 값을 리턴하며 내가 만들려던 흐름이 어떠한 것인지 더 이해가 쉽게 해준다.
이러한 점을 보더라도 타입스크립트의 사용 가치는 확실한 것같다.
예전 오래된 언어들을 보면 대부분이 정적언어인 것같다.
아마 지나친 정적언어로 뭔가 타입리스한 언어들을 선호하게 되고 만든 것 같은데,
기존 개개인의 일보다 팀 프로젝트들이 많아지고 협업을 진행하면서 어려운 점들이 많아지고 요즘은 오픈 소스들도 많고 남들 코드를 보는 시간이 더 많아지는 시대에 동적 언어의 불편한 점들이 점점 더 많아져 타입스크립트 와 같은 정적 타입 언어가 만들어진게 아닌가 싶다.