반응형
선언 합침(declaration merging)
선언 합침은 같은 이름으로 정의된 여러 정의를 자동으로 합치는 TypeScript의 기능입니다.
이번 글에선 인터페이스라는 맥락에서 간단하게 선언 합침을 살펴보겠습니다.
예를 들어 Member라는 똑같은 이름의 인터페이스를 두 개 정의하면 TypeScript는 자동으로 둘을 하나의 인터페이스로 합칩니다.
// Member는 name이라는 한 개의 필드를 가짐
interface Member {
name: string
}
// 여기서 Member는 name과 age 두 개의 필드를 가짐
interface Member {
age: number
}
let a : Member = {
name: 'Linda',
age: 24
}
이 코드를 타입 별칭으로 표현하면 아래와 같은 일이 일어납니다.
type Member = { // 'Member' 식별자가 중복되었습니다.ts(2300)
name: string
}
type Member = { // 'Member' 식별자가 중복되었습니다.ts(2300)
age: number
}
한편 인터페이스끼린 충돌해선 안됩니다. 한 타입의 프로퍼티는 T와 다른 타입의 프로퍼티 U가 동일하지 않다면 에러가 발생합니다.
interface Member {
age: string
}
interface Member {
age: number // 후속 속성 선언에 같은 형식이 있어야 합니다. 'age' 속성이 'string' 형식이어야 하는데 여기에는 'number' 형식이 있습니다.ts(2717)
}
제네릭을 선언한 인터페이스들의 경우 제네릭들을 선언 방법과 이름까지 똑같아야 합칠 수 있습니다.
interface Member <Age extends number>{ // 'Member'의 모든 선언에는 동일한 형식 매개 변수가 있어야 합니다.ts(2428)
age: Age
}
interface Member <Age extends string> {
age: Age
}
위의 경우는 TypeScript가 두 타입이 서로 동일할 뿐 아니라 할당할 수 있는지까지 확인하는 보기 드문 상황입니다.
반응형
'👶 TypeScript' 카테고리의 다른 글
인터페이스 구현 VS 추상 클래스 상속 (0) | 2023.01.15 |
---|---|
인터페이스 구현 (0) | 2023.01.15 |
인터페이스 (0) | 2023.01.15 |
this를 반환 타입으로 사용하기 (0) | 2023.01.15 |
super (0) | 2023.01.14 |