아이템 6 : 편집기를 사용하여 타입 시스템 탐색하기

타입스크립트를 설치하면 아래 두 가지를 실행할 수 있다.

타입스크립트 서버가 코드 자동 완성, 명세 검사, 검색, 리팩터링 등의 ‘언어 서비스'를 제공한다.

타입스크립트는 타입의 체크 외에도 예상하지 못한 에러를 방지할 수 있는 기능을 제공한다.

function getElement(elOrId: string|HTMLElement|null): HTMLElement {
	if (typeof elOrId === 'object') {
		return elOrId; // 'HTMLElement | null' 형식은 'HTMLElement'형식에 할당할 수 없습니다.
	} else if (elOrId === null) {
		return document.body;
	} else {
		const el = document.getElementById(elOrId);
		return el; // 'HTMLElement | null' 형식은 'HTMLElement'형식에 할당할 수 없습니다.
	}
}
  1. js에서 typeof null 은 “object”이다. 즉, null을 반환할 수 있으나, 반환값에 null을 허용하지 않아 에러를 발생한다.
  2. document.getElementById(elOrId) 역시 null을 반환할 수 있다. null 허용이 되지 않아 에러가 발생한다.

타입 선언을 통해 타입스크립트가 어떻게 모델링 되어 있는지 살펴볼 수 있다.

아이템 7 : 타입이 값들의 집합이라고 생각하기

타입스크립트의 가장 작은 집한은 아무 값도 포함되지 않는 공집합이며, never 타입에 해당한다. never타입으로 선언한 변수는 아무런 값을 할당할 수 없다.

const x: never = 12; // ~ '12' 형식은 'never' 형식에 할당할 수 없습니다.

<aside> ❓ never 타입은 어디에서 써야 할까?

never은 어떤 타입도 포함하고 있지 않아 return이 없는 곳에서 쓰인다. void는 undefined를 포함한다.

</aside>

그 다음으로 작은 집합은 한 가지 값만 포함하는 타입이다. 이들을 TS에서는 유닛(unit) 타입이라고 불리는 리터럴(literal) 타입이다.

type A = 'A';
type B = 'B';
type Twelve = 12;

두 개 혹은 세 개로 묶어 유니온(union) 타입으로 사용한다. | 를 이용하여 묶어주면 된다.