인터페이스 확장이란 하나의 인터페이스를 다른 인터페이스들이 상속받아 중복된 프로퍼티를 정의하지 않도록 도와주는 문법이다.
interface 타입이름 evtends 확장_할_타입이름
형태로 사용하며, extends
뒤에 확장할 타입의 이름을 정의하면 해당 타입에 정의된 모든 프로퍼티를 다 가지고 오게 된다.
그리고, 이때 확장 대상 타입인 Animal
은 Dog
타입의 슈퍼타입이 된다.
다음과 같이 확장과 동시에 프로퍼티의 타입을 재정의하는 것 또한 가능하다.
interface Animal {
name: string;
color: string;
}
interface Dog extends Animal {
name: "wawa"; // 타입 재 정의
breed: string;
}
주의할 점은 프로퍼티를 재 정의할 때 원본 타입을 A
, 재정의된 타입을 B
라고 하면 반드시 A
가 B
의 슈퍼타입이 되도록 재정의해야 한다.
따라서, 다음과 같이 name
을 Number
타입으로 재정의하는 것은 불가능하다.
Dog
타입이 Animal
탕비을 확장한다는 것은 Animal
타입의 서브타입이 된다는 의미이다. 그런데 name
프로퍼티를 Number
타입으로 재정의하면 더이상 Dog
는 Animal
타입의 서브타입이 아니게 된다. 따라서 이런 재정의는 불가능한 것이다.
인터페이스는 인터페이스 뿐만 아니라 타입 별칭으로 정의된 객체도 확장할 수 있다.
다음과 같이 여러개의 인터페이스를 확장할수도 있다.