✔ any 타입에는 타입 안정성이 없다
✔ any는 함수 시그니처를 무시한다
함수를 작성할 때는 시그니처를 명시해야 한다. 호출하는 쪽은 약속된 타입의 입력을 제공하고 함수는 약속된 타입의 출력을 반환한다. 그러나 any타입을 사용하면 이런 약속을 어길 수 있다.
function calAge(birth: Date): number {
//...
}
let birthDate: any = '1995-05-18';
calAge(birthDate); // ❗ 에러표시안함
birth매개변수는 string이 아닌 Date 타입이어야 한다. any 타입을 사용하면 calAge의 시그니처를 무시한다.
✔ any 타입에는 언어 서비스가 적용되지 않는다
어떤 심벌에 타입이 있다면 타입스크립트 언어 서비스는 자동완성 기능과 도움말을 제공하지만 any 타입인 심벌을 사용하면 아무런 도움을 받지 못한다.
✔ any 타입은 코드 리펙토링 때 버그를 감춘다
✔ any는 타입 설계를 감춘다
✔ any는 타입시스템의 신뢰도를 떨어뜨린다
any 타입을 쓰지 않으면 런타임에 발견될 오류를 미리 잡을 수 있고 신뢰도를 높일 수 있다.
✔ 마우스 커서를 대면 타입스크립트가 그 타입을 어떻게 판단하는지 확인할 수 있으므로 이를 활용할 것
✔ 편집기상의 타입오류를 살펴보는 것도 타입 시스템의 성향을 파악하는데 좋은 방법이다
❗ 자바스크립트에서 typeof null은 "object"이므로 주의하기
✔ 타입스크립트가 동작을 어떻게 모델링하는지 알기 위해 타입 선언 파일(예를들어, lib.dom.d.ts)을 찾아보는 방법을 터득해야 한다.
type A = 'A';
type AB = 'A' | 'B';
❗ 유니온 타입에 속하는 값은 어떠한 키도 없기 때문에 유니온에 대한 keyof는 공집합 이어야만 한다.
집합의 관점에서, 타입 체크의 주요 역할은 하나의 집합이 다른 집합의 부분 집합인지 검사하는 것이라고 볼 수 있다.
❗ instanceof 를 이용해 A 타입인지 체크하려고 할 때 instanceof는 자바스크립트의 런타임 연산자이고, 값에 대해서 연산을 하기 때문에 타입체크를 할 수 없다.
타입선언(:) 또는 단언문(as) 다음에 나오는 심벌은 타입인 반면, = 다음에 오는 모든 것은 값이다.
✔ typeof 연산자
❓ 런타임 타입이란?
👉 number, string, boolean, undefined, object, function
✔ ts에서의 구조분해할당
function email({person, subject,body} : {person:Person, subject: string, body: string}){
// ..
}
✔ class나 enum 같은 키워드는 타입과 값 두 가지로 사용될 수 있다.