이펙티브 타입스크립트 - 댄 밴더캄
1장 타입스크립트 알아보기.
아이템 1. 타입스크립트와 자바스크립트의 관계 이해하기.
- 타입스크립트는 자바스크립트를 포함하는 상위집합이다.
- 타입스크립트 언어는 자바스크립트 언어로 컴파일된다. 아이템 2. 타입스크립트 설정 이해하기.
- 타입스크립트 설정은 커맨드 혹은 tsconfig.ts 파일을 통해 관리할 수 있다.
- 설정들 중 noImplicitAny, strictNullChcks 중요. 아이템 3. 코드 생성(컴파일)과 타입이 관계없음을 이해하기.
- 코드 생성(컴파일)은 타입 시스템과 무관하다.
- 타입스크립트 타입은 런타임 동작이나 성능에 영향을 주지 않습니다.
- 타입 오류가 존재하더라도 코드 생성(컴파일)은 가능하다.
- 런타임에 타입스크립트 타입을 사용할 수 없다. 런타임에 타입을 지정하려면 별도의 방법이 필요. 아이템 4. 구조적 타이핑에 익숙해지기.
- duck typing / "만약 어떤 새가 오리처럼 걷고, 헤엄치고, 꽥꽥거리는 소리를 낸다면 나는 그 새를 오리라고 부를 것이다."
- 자바 스크립트는 본질적으로 덕 타이핑 기반이며 따라서 타입스크립트는 정적 타입이지만 덕 타이핑 기반이기도 하다.
- 덕 타이핑이란, 객체가 어떤 타입에 부합하는 '변수'와 '메서드'를 가질 경우 객체를 해당 타입에 속하는 것으로 간주하는 방식이다.
- 이에 따라 어떤 타입에 부합하는 변수와 메소드를 가지면서 추가적인 변수와 메서드를 가지더라도 해당 타입에 속하는 것으로 간주되며 여기서 오는 주의점들이 있다.
- 그리고 이러한 주의점을 고려하지 않기 위해 봉인된(Sealed) 타입이 있는 것 같다.
- 구조적 타이핑.
- 구조적 타이핑을 사용하면 유닛 테스팅을 손쉽게 할 수 있다. 아이템 5. any 타입 지양하기.
- 타입스크립트의 타입 시스템은 점진적이며 선택적이다.
- 타입을 조금씩 추가할 수 있기 때문에 점진적이며, 언제든지 타입 체커를 해제할 수 있기 떄문에 선택적이다. 이 기능들의 핵심은 any 타입이다.
- any 타입을 사용하면 타입 체카와 타입스크립트 언어 서비스를 무력화시켜버립니다. any 타입은 진짜 문제점을 감추며, 개발 경험을 나쁘게 하고, 타입 시스템의 신뢰도를 떨어뜨립니다. 최대한 사용을 피하도록 합시다.