462 words
2 minutes
TypeScript에서 interface와 type의 차이점에 대해 설명해주세요.
2025-04-23

면접 질문 복기합니다.

  1. 정의 방식
  2. 확장
  3. 선언 병합
  • interface객체 타입 정의에 특화되어 있으며, extends로 확장하고 선언 병합이 가능합니다.
  • type모든 타입 정의에 유연하며, 인터섹션(&)으로 확장하고 병합은 불가능합니다.

인터페이스는 객체 타입 정의에 특화되어 있고, extends로 상속 및 확장이 가능합니다.
타입 별칭(alias)은 객체 외에도 유니온, 튜플 등 다양한 타입 정의에 유리하며, &로 확장합니다.
또한 인터페이스는 선언 병합이 가능하지만, 타입 별칭은 동일 이름 중복 선언 시 오류가 발생합니다.

선언 병합#

interface선언 병합 가능#

interface User {
  name: string;
}

interface User {
  age: number;
}

// 병합됨!
const user: User = {
  name: "철수",
  age: 25,
};

동일한 이름으로 여러 번 선언해도 자동으로 하나로 합쳐짐.

type선언 병합 불가능#

type User = {
  name: string;
};

type User = {
  age: number;
};

// ❌ 오류: Duplicate identifier 'User'.

type은 동일한 이름으로 또 정의하면 에러 남.

interface가 복잡한 타입 조합에 불편한 이유#

✅ 유니온 타입(|), 튜플, 교차 타입(&) → interface에서는 불가능하거나 제한적#

// 복잡한 타입 예시: A | B
type ApiResponse = 
  | { status: "success"; data: string }
  | { status: "error"; errorCode: number };

// 또는 튜플
type Point = [number, number];

// 또는 유틸리티 타입 활용
type WithTimestamp<T> = T & { createdAt: Date };

이런 건 모두 type에서만 가능하고, interface에서는 못 한다.

interface는 유니온, 튜플처럼 비객체 타입을 정의할 수 없음#

// ❌ 이런 건 interface로 불가능
interface Something = string | number; // 🚫 안 됨
TypeScript에서 interface와 type의 차이점에 대해 설명해주세요.
softourr.github.io/typescript에서-interface와-type의-차이점에-대해-설명해주세요.md
Author
softourr
Published at
2025-04-23