[Ts] 정적 타입 검사자

열심히하시는개발자·2021년 2월 13일
0
post-thumbnail

1️⃣ TypeScript란?

  • 프로그램을 실행시키지 않으면서 코드의 오류를 검출한다.
  • 어떤 것이 오류인지와 어떤 것이 연산 되는 값에 기인하지 않음을 정할 수 있다.

In JavaScript(존재하지 않는 프로퍼티의 접근을 허용)

const obj = { width: 10, height: 15 };
//NaN

const area = obj.width * obj.heigth;

In TypeScript

// @errors: 2551
const obj = { width: 10, height: 15 };
const area = obj.width * obj.heigth;
  • 정적 타입 검사자인 TypeScript는 프로그램을 실행시키기 전에 값의 종류를 기반으로 프로그램의 오류를 찾는다.
  • 위 예시 같은 경우는 obj의 타입 떄문에 생기는 오류이다.

2️⃣ 구문(Syntax)

TypeScript는 JS의 구문이 허용되는, JavaScript의 상위 집합 언어이다. 예를 들어, 다음 코드는 )이 없으므로 구문 오류다.

// @errors: 1005
let a = (4
  • TypeScript는 독특한 구문 때문에 JavaScript 코드를 오류로 보지 않는다. 즉 어떻게 작성돼있는지 모르지만 작동하는 JavaScript 코드를 TyoeScript 파일에 넣어도 잘 작동한다.

3️⃣ 타입(Types)

TypeScript는 다른 종류의 값들을 사용할 수 있는 방법이 추가된, 타입이 있는 상위 집합이다.
위의 obj.height 오류는 구문 오류가 아닌, 값의 종류(타입)를 잘못 사용해서 생긴 오류다.

console.log(4 / []);
  • 위 코드는 구문적으로 옳은 JavaScript라서 NaN 을 출력한다. 그러나 TypeScript는 배열로 숫자를 나누는 연산이 옳지 않다고 판단하여 오류를 발생시킨다.

4️⃣ 특징(Feature)

  • 런타임 특성
    TypeScript는 JavaScript의 런타임 특성을 가진 프로그래밍 언어다. 예를 들어, JavaScript에서 0으로 나누는 행동은 런타임 예외로 처리하지 않고 Infinity 값을 반환한다. 논리적으로 TypeScript는 JavaScript 코드의 런타임 특성을 절대 변화시키지 않는다.

  • 삭제된 타입
    TypeScript의 컴파일러가 코드 검사를 마치면 타입을 삭제해서 결과적으로 "컴파일된" 코드를 만든다. 즉 코드가 한 번 컴파일되면, 결과로 나온 일반 JS코드에는 타입 정보가 없다.
    타입 정보가 없는 것은 TypeScript가 추론한 타입에 따라 프로그램의 특성을 변화시키지 않는다는 의미다.

0개의 댓글