1장. 타입스크립트 알아보기
아이템 1. 타입스크립트와 자바스크립트의 관계 이해하기
타입스크립트는 문법적으로도 자바스크립트의 상위집합이다. 자바스크립트 프로그램에 문법 오류가 없다면, 유효한 타입스크립트 프로그램이라고 할 수 있다.
- 문법의 유효성과 동작의 이슈는 독립적 문제
- 타입스크립트 프로그램이지만 자바스크립트가 아닌 프로그램이 존재한다.
- 타입스크립트 타입 시스템은 자바스크립트의 런타임 동작을
모델링한다.
- 런타임 오류를 발생시키는 코드를 찾아내지만, 모든 런타임 오류를 찾아낼거라고 기대하지는 말자.
아이템 2. 타입스크립트 설정 이해하기
- 가급적 설정 파일을 사용하는 것이 좋다.
noImplicitAny : 타입스크립트가 any로 추론을 가능하게 할 것인지, 설정 해제는 자바스크립트로 되어 있는 기존 프로젝트를 타입스크립트로 전환하는 상황에만 필요
strictNullChecks : null과 undefined가 모든 타입에서 허용되는지 확인
- "
undefined는 객체가 아닙니다"와 같은 런타임 오류를 방지할 수 있다.
아이템 3. 코드 생성과 타입이 관계없음을 이해하기
타입스크립트 컴파일러의 역할
- 최신 타입스크립트/자바스크립트를 브라우저에서 동작할 수 있도록 구버전의 자바스크립트로 트랜스파일
- 코드의 타입오류 체크
➡️ 두 가지 역할은 서로 완벽히 독립적으로 이루어진다.
- 컴파일은 타입 체크와 독립적으로 동작하므로 타입 오류가 있는 코드도 컴파일이 가능하다.
- 타입스크립트의 타입은 '제거 가능'하다. 자바스크립트로 컴파일 되는 과정에서 모든 인터페이스, 타입, 타입 구문은 제거되어 버린다.
- 타입스크립트에서는 런타임 타입과 선언된 타입이 맞지 않을 수 있다. 이 점을 항상 명심해야 한다.
- 타입과 런타임의 동작이 무관하므로 함수 오버로딩은 불가능하다.
아이템 4. 구조적 타이핑에 익숙해지기
- 자바스크립트는 본질적으로 덕 타이핑 기반.
- 구조적 타이핑을 제대로 이해하면 오류인 경우와 오류가 아닌 경우의 차이를 알 수 있다.
- 함수를 작성할 때, 호출에 사용되는 매개변수의 속성들이 매개변수의 타입에 선언된 속성만을 가질거라 생각하기 쉽지만, 타입은 열려있다. (= 타입의 확장에 열려 있다.)
- 구조적 타이핑의 장점은 유닛 테스팅이 쉬워지고 라이브러리 간의 의존성을 완벽히 분리할 수 있다는 것이다.
아이템 5. any 타입 지양하기
- 타입스크립트의 타입 시스템은 점진적이고 선택적이다.
any 타입에는 타입 안정성이 없다.
any는 함수 시그니처를 무시해 버린다. -> 약속된 입력과 출력의 타입을 어길 수 있다.
any 타입에는 언어 서비스가 적용되지 않는다.
any 타입은 코드 리팩토링 때 버그를 감춘다.
any는 타입 설계를 감춘다.
- 깔끔하고 정확하교 명료한 코드 작성을 위해 제대로 된 타입 설계는 필수이다.
any는 타입시스템의 신뢰도를 떨어뜨린다. 타입체커를 신뢰하게 하자.
타입스크립트의 모토는 '확장 가능한 자바스크립트'이다.
👀 결론 : any를 사용하지 말자!
1장. 타입스크립트 알아보기
아이템 1. 타입스크립트와 자바스크립트의 관계 이해하기
모델링한다.아이템 2. 타입스크립트 설정 이해하기
noImplicitAny: 타입스크립트가any로 추론을 가능하게 할 것인지, 설정 해제는 자바스크립트로 되어 있는 기존 프로젝트를 타입스크립트로 전환하는 상황에만 필요strictNullChecks:null과undefined가 모든 타입에서 허용되는지 확인undefined는 객체가 아닙니다"와 같은 런타임 오류를 방지할 수 있다.아이템 3. 코드 생성과 타입이 관계없음을 이해하기
타입스크립트 컴파일러의 역할
➡️ 두 가지 역할은 서로 완벽히 독립적으로 이루어진다.
아이템 4. 구조적 타이핑에 익숙해지기
아이템 5. any 타입 지양하기
any타입에는 타입 안정성이 없다.any는 함수 시그니처를 무시해 버린다. -> 약속된 입력과 출력의 타입을 어길 수 있다.any타입에는 언어 서비스가 적용되지 않는다.any타입은 코드 리팩토링 때 버그를 감춘다.any는 타입 설계를 감춘다.any는 타입시스템의 신뢰도를 떨어뜨린다. 타입체커를 신뢰하게 하자.👀 결론 : any를 사용하지 말자!