
15강 메인주제는 타입호환... 특히 구조적 타이핑이라는 키워드에 집중할 것
타입호환이란 타입스크립트 코드에서 특정 타입이 다른 타입에 잘 맞는지를 의미하는 것이다.
그 타입에 있는 속성의 타입을 기준으로 타입들이 호환되는지 확인되며 타입스크립트는 구조적 타이핑으로 서로 형태가 유사하면 같은것으로 인정해준다.
구조적 타이핑: 내부적으로 존재하고 있는 속성과 타입에 대한 정의들을 기준으로 비교를 하는 것
이렇게 두가지의 인터페이스를 생성한 뒤 변수들에 각각의 타입을 지정했다.


이렇게 한 다음에 developer에 person을 할당하면?

에러가 발생하는 것을 볼 수 있다.

왼쪽에 있는 타입이 객체가 더 많은 속성들로 구조적으로 더 큰 관계를 갖고 있기 때문에
Person타입은 name만 가지고 있고 skill은 없으므로 person이 developer에 할당될 수 없는 것이다.

오른쪽에 있는 타입이 더 많은 속성을 가지고 있거나 구조적으로 클 때 왼쪽과 호환이 된다고 보면 된다.

두개의 함수 add와 sum 이 있으며 둘은 서로 받는 매개변수의 개수가 다르다.
Add는 두개의 인자를 받을 수 없게끔 하나의 인자만 받을 수 있어서 안되고
왼쪽에 위치한 add보다 sum이 범위적 타입적으로 더 크기 때문에 sum이라는 타입이 add와 호환되지 않는다.

반면 여기서는 sum이 왼쪽에 위치해잇으며 add보다 더 크기 때문에 호환이 가능하다.
다음으로는 제네릭을 사용해서 변수를 생성하고 해당 타입을 제네릭으로 넘겨준다고 생각해보자.

제네릭에서 만약 내부 구조를 모두 비워둔 상태라면 제네릭으로 넘겨주는 값이 달라도 서로 구조상으로는 다른점이 없기 때문에 호환이 가능하다.

하지만 내부가 빈값이 아니라 어떤 구조로 이루어져있고 제네릭을 받아서 타입이 이루어진다면 다음과 같이 호환이 되지 않는 것을 볼 수 있다.
