타입 별칭은 동일한 스코프 내에 중복된 이름으로 선언할 수 없는 반면에 인터페이스는 가능하다.
중복된 이름의 인터페이스 선언은 결국 모두 하나로 합쳐지기 때문이다.
따라서 위 코드에 선언한 Person
인터페이스들은 합쳐져 아래와 같은 인터페이스가 된다.
interface Person {
name: string;
age: number;
}
이렇게 동일한 이름의 인터페이스들이 합쳐지는 것을 선언 합침이라고 하며, 다음과 같이 사용할 수 있다.
만약 동일한 이름의 인터페이스들이 동일한 이름의 프로퍼티를 서로 다른 타입으로 정의한다면 오류가 발생한다.
이렇게 동일한 프로퍼티의 타입을 다르게 정의한 상황을 ‘충돌’ 이라고 표현하며 선언 합침에서 이런 충돌은 허용되지 않는다.
아래와 같이 동일한 타입으로 정의하는 것은 문제없다.