타입 별칭은 동일한 스코프 내에 중복된 이름으로 선언할 수 없는 반면 인페이스를 가능함
type Person = {
name: string;
};
type Person = { ❌
age: number;
};interface Person {
name: string;
}
interface Person { // ✅
age: number;
}→ 중복된 이름의 인터페이스 선언은 결국 모두 하나로 합쳐지기 때문
따라서 위 코드에서 선언한 Person 인터페이스들을 결국 합쳐져 다음과 같은 인터페이스가 됨
interface Person {
name: string;
age: number;
}이렇게 동일한 이름의 인터페이스들이 합쳐지는 것을 선언 합침이라고 부름. 따라서 다음과 같이 사용할 수 있음
interface Person {
name: string;
}
interface Person {
age: number;
}
const person: Person = {
name: "이정환",
age: 27,
};동일한 이름의 인터페이스들이 동일한 이름의 프로퍼티를 서로 다른 타입으로 정의하면 오류
interface Person {
name: string;
}
interface Person {
name: number;
age: number;
}→ 이러한 상황을 “충돌”이라고 표현
→ 선언 합침에서 이러한 충돌은 허용되지 않음