minstudio

선언 병합 (Declaration Merging)

동일한 이름으로 선언된 여러 개의 인터페이스(Interface)나 네임스페이스가 덮어씌워지지 않고 하나로 합쳐지는(Merge) 타입스크립트만의 고유한 성질입니다.

🧩 조각 모음 (Declaration Merging) interface User { name: string; } interface User { age: number; } + interface User (Merged) { name: string; age: number; } 동일한 이름의 인터페이스가 선언되면 덮어씌워지지 않고 자동으로 속성들이 병합됨

🧩 조각 모음 (Declaration Merging)

타입 앨리어스(`type`)는 불가능하지만, 인터페이스(`interface`)는 가능합니다.
외부 라이브러리나 전역 객체(`window`)에 내가 원하는 커스텀 속성을 추가할 때 필수적입니다.

// 1. 선언 병합의 기본 원리
interface Car {
  brand: string;
}

// 나중에 동일한 이름으로 다시 선언하면, 기존 인터페이스에 속성이 "추가"됩니다.
interface Car {
  speed: number;
}

const myCar: Car = {
  brand: "Tesla",
  speed: 250 // 두 인터페이스가 합쳐졌기 때문에 둘 다 필수 속성입니다.
};

// 2. 실무 활용 (전역 Window 객체 확장하기)
// 브라우저의 Window 객체에 나만의 커스텀 프로퍼티를 안전하게 추가합니다.
interface Window {
  myCustomPlugin: {
    init: () => void;
  };
}

window.myCustomPlugin = {
  init: () => console.log("Plugin Loaded!")
};
선언 병합 (Declaration Merging) | Minstudio