DeclarationMerging

1개의 게시글

TypeScript

[TypeScript] 인터페이스 선언 합침 (Declaration Merging)

November 27, 2025

타입스크립트에서 타입 별칭(Type Alias) 은 동일한 스코프 내에서 같은 이름으로 중복 선언하는 것이 불가능하다. TypeScript type Person = { name: string; }; // ❌ 에러 발생: 중복된 식별자 'Person' // type Person = { // age: number; // }; 하지만 인터페이스(Interface) 는 가능하다. 심지어 에러가 나지 않을 뿐만 아니라, 알아서 하나로 합쳐진다. 1. 선언 합침이란? 동일한 이름으로 정의된 여러 개의 인터페이스가 컴파일 시점에 자동으로 하나의 인터페이스로 합쳐지는 기능을 말한다. TypeScript // 첫 번째 선언 interface Person { name: string; } // 두 번째 선언 (에러 없음 ✅) interface Person { age: number; } 위 코드는 내부적으로 다음과 같이 하나의 인터페이스로 합쳐진다. TypeScript // 결과적으로 이렇게 됨 interface Person { name: string; age: number; } 따라서 Person 타입의 변수를 생성할 때는 두 인터페이스에 정의된 모든 프로퍼티를 구현해야 한다. TypeScript const person: Person = { name: "조태민", age: 25, }; 이 기능은 주로 외부 라이브러리의 기존 타입 정의에 내가 필요한 속성을 추가하고 싶을 때(예: Window 객체 확장 등) 유용하게 사용된다. --- 2. 주의할 점: 프로퍼티 충돌 인터페이스가 합쳐질 때, 만약 동일한 이름의 프로퍼티가 양쪽에 존재한다면 어떻게 될까? 1. 타입이 같은 경우: 문제 없다. (그냥 합쳐짐) 2. 타입이 다른 경우: ❌ 에러가 발생한다 (충돌). TypeScript interface Person { name: string; } interface Person { // ❌ 에러 발생! // 후속 속성 선언의 타입은 반드시 기존 선언의 타입과 같아야 한다. // 'string' 형식이어야 하는데 'number' 형식이다. name: number; age: number; } 첫 번째 Person에서는 name을 string으로, 두 번째 Person에서는 number로 정의했다. 이렇게 동일한 프로퍼티를 서로 다른 타입으로 정의하면 충돌로 간주되어 선언 합침이 허용되지 않는다. --- 요약 1. 타입 별칭은 중복 선언이 불가능하지만, 인터페이스는 가능하다. 2. 선언 합침: 같은 이름의 인터페이스는 자동으로 하나로 합쳐진다. 3. 충돌 주의: 합쳐지는 과정에서 동일한 프로퍼티 이름인데 타입이 다르면 에러가 발생한다.

TypeScriptStudyInterfaceDeclarationMerging