한 입 크기로 잘라먹는 Ts - 객체 타입의 호환성

한 입 크기로 잘라먹는 Ts - 객체 타입의 호환성

슈퍼타입과 서브타입을 객체에 연관 시켜보자

·

2 min read

이정환 님의 한 입 크기로 잘라먹는 타입스크립트 를 수강한 내용 입니다.

객체 타입의 호환성

모든 객체 타입은 각각 다른 객체 타입들과 슈퍼-서브 타입 관계를 갖습니다.

  • 따라서 업 캐스팅은 허용하고 다운 캐스팅은 허용하지 않습니다.

업 캐스팅과 다운 캐스팅에 관한 내용이 궁금하면 클릭

예시

1

  • Animal 타입의 변수 animal에 Dog 타입의 변수 dog를 할당하는 것은 가능합니다.

  • 그러나 반대로 dog 변수에 animal 변수의 값을 할당하는 것은 불가능합니다.

Animal 타입이 Dog 타입의 슈퍼타입이기 때문입니다.

Dog 타입이 더 프로퍼티가 많은데요 ?

언뜻 보면 Dog 타입이 더 많은 프로퍼티를 정의하고 있어 슈퍼타입처럼 보일 수 있습니다.

  • Animal 타입은 name과 color 프로퍼티를 갖는 모든 객체들을 포함하는 집합으로 볼 수 있고

  • Dog 타입은 name과 color 거기에다 추가로 breed 프로퍼티를 갖는 모든 객체를 포함하는 집합으로 볼 수 있습니다.

그러므로 어떤 객체가 Dog 타입에 포함된다면 무조건 Animal 타입에도 포함됩니다. 그러나 반대로 Animal 타입에 포함되는 모든 객체Dog 타입에 포함되는것은 아닙니다. 따라서 결국 Animal은 Dog의 슈퍼타입입니다.

추가 프로퍼티가 없는, 조건이 더 적은 타입들이 슈퍼 타입이 됩니다.

초과 프로퍼티 검사

초과 프로퍼티 검사란 변수를 객체 리터럴로 초기화 할 때 발동하는 타입스크립트의 특수한 기능입니다.

  • 타입에 정의된 프로퍼티 외다른 초과된 프로퍼티를 갖는 객체를 변수에 할당할 수 없도록 막습니다.

2

Book 타입에 정의되지 않은 skill 프로퍼티를 갖는 객체를 할당하려고 했으므로 초과 프로퍼티 검사가 실패해 오류가 발생하고 있는 것 입니다.

초과 프로퍼티 검사가 허용되는 경우

초과 프로퍼티 검사는 단순히 변수를 초기화 할 때 객체 리터럴을 사용하지만 않으면 발생하지 않습니다.

3

  • 값을 별도의 다른 변수에 보관한 다음 변수 값을 초기화 값으로 사용하면 발생하지 않습니다.