
타입은 위와 같이 계층이 있음.타입은 부모-자식 관계가 있기 때문에 호환성을 따져야 함.자식 계층의 값을 부모 계층의 값에 대입하는 것은 가능하지만,역은 불가능하다.

타입 계층도의 최상단\-> 모든 타입들을 받아줄 수 있음타입 계층도의 최하단에 위치\-> 불가능, 모순을 의미에러 반환과 같이 불가능, 모순적인 상황에 부여=> 모든 타입으로 업캐스팅 가능 (모든 타입에 대입 가능)\-> 아무것도 반환하지 않는 함수의 반환값 타입으로
모든 객체 타입은 각각 다른 객체 타입들과 슈퍼-서브 타입 관계를 갖는다.따라서 업 캐스팅은 허용하고 다운 캐스팅은 허용하지 않습니다.언뜻 보면 Dog 타입이 더 많은 프로퍼티를 정의하고 있어 슈퍼타입처럼 보일 수 있지만 그 반대당연히 Animal타입이 더 포괄적인 개

여러개의 타입을 합성해서 만드는 타입\-> 합집합(Union) 타입\-> 교집합(Intersection) 타입 존재바'|' 를 이용함.위와 같이 Union1 타입을 Dog와 Person 타입의 합집합으로 표현위와 같은 객체들을 포함함하지만 위와 같은 객체는 포함 불가
타입이 정의되어 있지 않은 변수의 타입을 자동으로 추론.(타입 추론이 불가능한 변수(ex 매개변수)에는 암시적으로 any 타입이 추론)"strict": ture 설정시, 타입추론이 불가능한 변수의 암시적 any 타입은 오류.1) 변수 선언2) 구조 분해 할당3) 함수의
타입스크립트는 위와 같은 방식으로 빈 객체로 초기화가 불가능위와 같이 as Person으로 단언해주면 됨.값 as 타입 형식의 단언식을 A as B로 표현했을 때, 아래의 두가지 조건중 한가지를 반드시 만족해야 함.1\. A가 B의 슈퍼타입이다2\. A가 B의 서브타입
위와 같이 확정되지 않은 타입에 메서드를 사용하면 오류 발생.\-> 조건문을 통해 보장 필요instanceof를 이용하면 내장 클래스 타입을 보장우리가 직접 만든 타입과 함께 사용하려면 다음과 같이 in 연산자를 이용
교집합이 없는 타입들을 모아 만든 유니온 타입위의 코드를 보면,User 타입의 매개변수 user를 받아, 타입 좁히기를 통해 console.log를 실행직관적이지 못하므로 tag 프로퍼티를 추가