타입스크립트의 타입호환

jonghyun.log·2021년 9월 13일
1

타입스크립트

목록 보기
1/2
post-thumbnail

타입스크립트에서는 인터페이스를 사용해서 타입을 정의해서 사용하는데 이때,
대다수의 인터페이스 자료형은 객체로 표현되는 경우가 많다.
각 인터페이스 자료형에는 호환되는 특이한 성질이 있어서 간단하게 정리해보려고 한다.

interface Human {
	name : string;
    }
interface Man {
	name : string;
    	gender : 'man';
}

가령 이런 두개의 인터페이스가 있을때 각각의 인테페이스에 맞게 변수를 선언해주자

let human : Human;
let man : Man;

이때 두 변수는 호환이 되기도 하면서 되지않기도(?) 한다.

이게 무슨말이냐면

human = man //잘 호환됨
man = human //Error!

두변수에 각각 값을 넣어보면 이런 현상이 발생하게 되는데
이게 왜 이렇게 되는지 생각해보면
첫번째 코드는 human 변수에는 name 이라는 프로퍼티만 있으면 되는데
(컴파일러가 name 프로퍼티가 있는지 여부를 검사하게됨)
이 human 변수에 man 변수를 넣게 되면 man 변수는 {name : string, gender : 'man'}
이렇게 두개의 프로퍼티가 있지만 Human 자료형 입장에서는 name만 있으면 ok해주고 뒤에 뭐가 있던지
별로 신경쓰지않고 할당해준다.

반면 두번째 코드에서는
man 변수에는 name과 gender 두가지 속성이 무조건 포함이 되어야하므로
human 변수에 gender 속성이 없어서 에러를 띄워준다.

고등학교때 배운 집합의 내용으로 생각하면 쉬울거같다.
정리해보자면 Human은 Man 보다 더 포괄적인 집합이다. 즉 Human은 Man을 포함하는 집합이고
Man은 Human에 포함되는 집합이다.

1개의 댓글

comment-user-thumbnail
2021년 9월 17일

좋은 글 감사합니다 ㅎㅎ

답글 달기