선언 병합(Declaration Merging)

이민서·2025년 1월 22일

TypeScript

목록 보기
3/7

선언 병합(Declaration Merging)

TypeScript의 중요한 기능 중 하나로, 같은 이름으로 선언된 여러 개의 분리된 선언들을 하나로 결합하는 것을 말한다.

interface 병합

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;
  }
}

선언 병합은 라이브러리 개발이나 기존 타입 정의를 확장할 때 유용하게 사용된다.
하지만 일반적인 어플리케이션 캐발에서는 코드의 명확성을 위해 가급적 한 곳에서 전체 인터페이스를 정의하는 것이 좋다.

0개의 댓글