둘이 어떤 차이가 있는지?
확장 방법의 차이
- interface는 extends를 사용하여 확장 가능함.
- type은 &(intersection) 연산자를 사용하여 결합 가능함.
interface Dessert {
name: string;
}
interface Cake extends Dessert {
fruit(): void;
}
type DessertType = {
name: string;
}
type CakeType = DessertType & {
fruit(): void;
};
합집합(Union) 타입 지원 여부
- type은 유니언을 이용한 타입 조합이 가능, interface는 불가능
interface A {
name: string;
}
interface B {
age: number;
}
// type에서는 가능
type C = A | B;
const person1: C = { name: "Alice" }; // OK
const person2: C = { age: 30 }; // OK
const person3: C = { name: "Bob", age: 25 }; // OK
중복 선언 가능 여부
- interface는 같은 이름으로 여러 번 선언하면 자동으로 병합됨.
- type은 같은 이름으로 중복 선언 불가능.
interface Person {
name: string;
}
interface Person {
age: number;
}
// 결과적으로 { name: string; age: number; }로 합쳐짐
type PersonType = {
name: string;
};
type PersonType = {
age: number;
}; // 에러 발생 (Duplicate identifier 'PersonType')
요약
- 확장성이 필요한 경우(객체 지향적인 구조) -> interface
- 유니언 타입 같은 다양한 조합이 필요한 경우 -> type
'TypeScript' 카테고리의 다른 글
implements와 extends (0) | 2025.02.11 |
---|