TypeScript

type과 interface

kelly09 2025. 2. 13. 12:51

둘이 어떤 차이가 있는지?

 

확장 방법의 차이

  • 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