TypeScript의 중요한 기능 중 하나로, 같은 이름으로 선언된 여러 개의 분리된 선언들을 하나로 결합하는 것을 말한다.
interface Car {
name: string;
price: number;
}
interface Car {
color: string;
}
// 위의 두 interface는 자동으로 병합되어 아래와 같이 사용
interface Car {
name: string;
price: number;
color: string;
}
const myCar: Car = {
// 모든 속성을 사용해야 함
name: "Tesla",
price: 50000,
color: "red"
};
interface User {
age: number;
}
// (X) 같은 이름의 속성은 같은 타입이어야 함
interface User {
age: string;
}
interface Processor {
process(a: number): number;
}
interface Processor {
process(a: string): string;
}
// 위 선언들은 유효한 함수 오버로드
class Album {
label: Album.AlbumLabel = {};
}
namespace Album {
export interface AlbumLabel {
artist?: string;
}
}
선언 병합은 라이브러리 개발이나 기존 타입 정의를 확장할 때 유용하게 사용된다.
하지만 일반적인 어플리케이션 캐발에서는 코드의 명확성을 위해 가급적 한 곳에서 전체 인터페이스를 정의하는 것이 좋다.