** Migrated from old blog
Typescript 란?
Javascript에 C#, Java에 있는 ‘타입 안정성 Type Safety’을 적용시킨 언어.
Javascript의 맹점이 바로 타입 안정성이기 때문이다.
대표적 증상:
런타임 에러 Runtime Error
- 자바스크립트에선 함수의 매개변수에 타입을 지정하지 않는다. 그래서 함수를 예상하지 못한 타입의 인자와 함께 호출하여도 함수가 그대로 실행되어 잘못된 결과를 내거나 런타임 오류를 낸다. (숫자를 반환하길 기대한 함수가 NaN을 반환하거나 , undefined.length에 접근할 수 없어서 런타임 오류가 발생.)
- “Uncaught TypeError....”
- 이와 같은 타입에러는 코드가 실행되고 나서 유저가 실제로 사용할 때서야 발생하기 때문에 매우 찾아내기 어렵다.
- ex 1 ) 리액트의 조건부 렌더링에서 단축 평가를 이용할 때, fetch 이전에 함수가 실행되면서 에러가 발생. (cannot get length of undefined)
- ex 2 ) 잘못된 인풋의 형태로 인해 에러 발생.
타입 스크립트는 위와 같은 에러들을 사전에 방지하고 컴파일 에러 Compile Error로 나타낸다.
Compile
TypeScript 코드는 JS로 컴파일된다. 그 과정에서 타입스크립트 컴파일러는 에러를 확인한다.
만일 컴파일 에러가 있다면, 코드는 실행조차 되지 않는다.
(되긴 한다. 컴파일 에러 빨간 줄이 가득 나타날 뿐.)
TS 타입 추론 (Type Infer) / 기본 타입
타입스크립트에선 2가지 방식으로 타입을 정의한다.
- 데이터와 변수에 직접 Type을 정의한다.
- TS 컴파일러가 데이터의 타입을 추론한다. (Polymorhpism, Generics..)
let a : boolean = true
a = 1
// compile 에러가 발생하며 코드가 실행되지 않는다.
let a = 'string'
a = 32
// 마찬가지로 compile 에러가 발생한다.
// 변수 a 초기화에서 TS는 타입을 문자열로 추론했기 때문이다.