이정환 님의 한 입 크기로 잘라먹는 타입스크립트 를 수강한 내용 입니다.
인터페이스 확장
하나의 인터페이스를 다른 인터페이스들이 상속
받아
- 중복된 프로퍼티를 정의하지 않도록 도와주는 문법입니다.
예시를 보며 살펴보겠습니다.
Animal 타입을 기반으로 Dog, Cat, Chicken이 각각의 추가적인 프로퍼티를 갖고 있는 형태임을 알 수 있습니다.
name
그리고age
프로퍼티가 모든 타입에 중복해서 정의되어 있다는 점도 함께 발견하실 수 있습니다.
중복 코드는 언제나 좋지 않습니다.
특정 인터페이스를 기반으로 여러 개의 인터페이스가 파생되는 경우 중복 코드가 발생할 수 있는데 이럴 때에는 인터페이스의 확장
기능을 이용하면 좋습니다.
사용하는 방법
interface 타입이름 extends 확장_할_타입이름
의 형태
- extends 뒤에 확장할 타입의 이름을 정의하면 해당 타입에 정의된 모든 프로퍼티를 다 가지고 오게 됩니다.
프로퍼티 재 정의하기
확장과 동시에 프로퍼티의 타입을 재 정의 하는 것 또한 가능합니다.
Dog 타입은 Animal 타입을 확장하며 동시에 name 프로퍼티의 타입을
String 타입에서 “doldol” String Literal 타입으로 재정의 했습니다.
이렇게 확장받는 타입에서 프로퍼티의 타입을 재정의 할 수 있습니다.
⚠️ 주의할 점
원본 타입을 A, 재 정의된 타입을 B라고 하면 반드시 A가 B의 슈퍼 타입
이 되도록 재정의 해야 합니다.
따라서 다음과 같이 name을 Number 타입으로 재 정의 하는 것은 불가능합니다.
Dog 타입이 Animal 타입을 확장한 다는 것은 Animal 타입의 서브타입이 된다는 의미입니다.
- 그런데 name 프로퍼티를 Number 타입으로 재 정의 해 버리면 이제는 Dog는 Animal의 서브 타입이 아니게 됩니다.
따라서 이런 재 정의는 불가한 것 입니다.
인터페이스의 타입 별칭 확장
인터페이스는 인터페이스 뿐만 아니라 타입 별칭으로 정의된 객체도 확장할 수 있습니다.
다중 확장
여러 개의 인터페이스를 확장하는 것 또한 가능합니다.
인터페이스 선언 합치기
타입 별칭은 동일한 스코프 내에 중복된 이름으로 선언할 수 없는 반면 인터페이스는 가능 합니다.
동일한 이름의 인터페이스들이 합쳐지는 것을 선언 합침(Declaration Merging) 이라고 부릅니다.
사용 예시
⚠️ 주의할 점
동일한 이름의 인터페이스들이 동일한 이름의 프로퍼티를
서로 다른 타입
으로 정의한다면 오류가 발생합니다.
동일한 프로퍼티의 타입을 다르게 정의한 상황을 ‘충돌’ 이라고 표현하며 선언 합침에서 이런 충돌은 허용되지 않습니다.