TypeScript

[TypeScript] interface vs type

ssohyunn 2024. 4. 15. 15:47

정의할 수 있는 타입

type과 interface는 공통적으로 객체 타입을 정의하거나 클래스에 특정 메서드나 프로퍼티를 가지도록 강제할 때 사용할 수 있다.

interface PersonA {
  name: string
}

type PersonB = {
  name: string
}

 

type은 모든 타입(원시 타입, 유니온 타입, 튜플 타입 등)을 정의할 때 사용할 수 있지만, interface는 객체 타입을 정의할 때 사용가능하다.

// ⭕️
type name = string;

// ❌
interface name = string;

 

 

확장 방법 (상속)

interface Person {
  name: string
}

interface Player extends Person {
  nickname: string
}
type Person = {
  name: string
}

type Player = Person & {
  nickname: string
}

interface는 클래스와 비슷하게 extends 키워드를 이용해 확장할 수 있고,

type은 & 연산자를 이용해 확장할 수 있다.

 

 

선언적 확장

interface Person {
  name: string
}

interface Person {
  address: string
}

interface Person {
  age: number
}

const so: Person = {
  name: "so",
  address: "seoul",
  age: 1
}

interface는 같은 이름으로 여러 개의 interface를 선언해주면, 타입스크립트가 자동으로 이를 하나로 합쳐준다.

type Person = {
  name: string
}


// ❌ error
type Person = {
  address: string
}

하지만 type 키워드로는 이것이 불가능하다.

type은 새 property를 추가하기 위해 다시 선언될 수 없지만 interface는 항상 상속이 가능하다.

따라서 객체 타입을 정의할 때는 객체의 확장성을 위해 interface를 사용하는 것을 추천한다고 한다.