포인트는 작은거에 큰거는 담을 수 있지만, 큰거에 작은거는 큰 거를 다 못채우니까 못 담음!!
작은거 = 큰거 를 담을때만 타입 호환이 된다.
작은거 = 큰거 담기 ok
Student 인터페이스 안에는 name과 skill 이렇게 2개,
Teacher 인터페이스 안에는 name 하나만 지정되어있다.
그리고 변수에 각각 타입을 지정하였을때, student1에 teacher1을 담았을때는 오류가 나고,
반대로 teacher1에 student1을 담았을 때는 오류가 나지 않는다.
위에말이 무슨 말인가 하겠지만 내가 이해한 바로는
interface안의 개수를 구조라고 하면 구조가 많을수록 == 크다
적을수록 == 작다
Teacher에는 name만 선언했기때문에 호환이 되지만 더 큰 구조에서는 작은 구조를 호환할 수 없다.
이는 interface뿐만 아니라 class도 동일 !
위에서 선언했던 Student 를 사용하는 student1에 구조상 1개밖에 없는 class를 담으려고 하니 빨갛게 오류가 나는것을 확인할 수 있다.
함수의 타입호환
위와 동일하게 호환되는 것을 볼 수 있다.
제네릭의 타입호환1 - 비어있을 때
EmptyGeneric 는 비어있기때문에 둘다 구조가 동일하다고 보므로 두 case 모두 에러나지 않는다.
제네릭의 타입호환2 - 비어있지 않을때
구조적으로는 동일하지만 안에 type이 같을 수 없기 때문에 호환 불가하다는 것을 알 수 있다.
반응형
'Typescript' 카테고리의 다른 글
[typescript] ts파일안에 html 파일 import 할때 타입선언하기 (InstaceType) (0) | 2022.01.17 |
---|---|
[typescript 기본] 타입스크립트의 모듈화 ( == es6 modules) + 예제 (0) | 2022.01.16 |
[typescript 기본] 타입가드 is와 타입단언 as (0) | 2022.01.16 |
[typescript 기본] 타입 단언 as (0) | 2022.01.16 |
[typescript 예제] 기본내용으로 문제풀어보기 (0) | 2022.01.06 |