TypeScript
JavaScript는 동적 타입 언어로 타입을 따로 지정하지 않습니다.
그에 반해 TypeScript는 JavaScript에 타입을 부여한 JavaScript의 확장된 언어입니다.
TypeScript 특징
- 컴파일 언어, 정적 타입 언어
- 자바스크립트는 동적 타입의 인터프리터 언어로 런타임에서 오류 발견, 타입스크리는 정적 타입의 컴파일 언어이므로 TS 컴파일러 or 바벨을 통해 JS코드로 변환됨. 코드 작성 단계에서 타입을 체크해 오류를 확인하고 미리 타입을 결정하기 때문에 실행 속도가 매우 빠름 단 코드 작성 시 매번 타입을 결정해야 하기 때문에 번거롭고 코드량이 증가, 컴파일 시간이 오래 걸린다는 단점
- JavaScript Superset
- TS는 JS에서 문법을 추가한 언어, 즉 유효한 JS로 작성한 코드는 확장자를 .JS에서 .TS로 변경하고 타입스크립트로 컴파일해 변환 가능
TypeScript 장점
- 높은 수준의 코드 탐색과 디버깅
- TS는 코드에 목적을 명시하고 목적에 맞지 않는 타입의 변수나 함수들에서 에러를 발생시켜 버그를 사전에 제거
- 자바스크립트 호환
- 개발 편의성 및 유지보수
- 소스 코드에 타입 정보가 있으므로 소스 코드를 이해하기 쉬워짐
- 컴파일러도 소스 코드에 담긴 타입 정보 이용 가능
- 소스 코드로부터 각종 메타 정보를 추출하여 개발 편의성(탐색, 참조, 자동 완성, 리팩터링)
- 숨겨진 에러 찾기 가능
- 강력한 생태계
TS vs JS
| TS | JS |
---|
타입 정보 위치 | 소스코드 | X |
컴파일러 타입 추론 기능 | O | X |
컴파일러 타입 검증 기능 | O | |
타입이 잘못되면 빌드 자체가 불가능 | X | |
자동 완성 기능 | O | X |
문맥상 제한적인 추론 | | |
참조 탐색 기능 | O | |
어디에 사용되었는지 100% 추적 | X | |
리팩터링 기능 | O | X |
코드 양 | 다소 많음 | 다소 적음 |
TypeScript Type
Type | desc |
---|
boolean | true, false |
null | 값이 없다는 것을 명시 |
undefined | 값을 할당하지 않은 변수의 초기값 |
number | 숫자(정수와 실수, Infinity, NaN) |
string | 문자열 |
symbol | 고유하고 수정 불가능한 데이터 타입이며 주로 객체 프로퍼티들의 식별자로 사용(ES6에서 추가) |
object | 객체형(참조형) |
array | 배열 |
tuple | 고정된 요소수 만큼의 타입을 미리 선언후 배열을 표현 |
enum | 열거형. 숫자값 집합에 이름을 지정한 것 |
any | 타입 추론(type inference)할 수 없거나 타입 체크가 필요없는 변수에 사용, var 키워드로 선언한 변수와 같이 어떤 타입의 값이라도 할당 가능 |
void | 일반적으로 함수에서 반환값이 없을 경우 사용 |
never | 결코 발생하지 않는 값 |