[TS] Type alias & interface

김다빈·2023년 9월 2일

타입스크립트

목록 보기
6/13
post-thumbnail

Type alias(타입 별칭)과 interface는 타입의 이름을 지정하는 방법으로 사용법이 매우 유사하다.

하지만, 차이점이 있다면 (1) 타입 확장 방법이 다르고, (2) 선언 병합 가능 여부이다.

📌 타입 확장 방법

✅ interface

extends 키워드를 사용해서 기존 타입으로부터 확장된 타입을 생성할 수 있다. (클래스 상속 느낌)

interface Animal {
  name : string;
}

interface Bear extends Animal {
  honey : boolean;
}

const bear1: Bear = {
  name : 'honey bear',
  honey : true
}

✅ Type alias

타입 별칭이 확장할 때는 extends 키워드 사용이 불가능하고, &(intersection operator) 를 사용해야 한다.

type Animal = {
  name : string;
}

type Bear = Animal & {
  honey : boolean;
}

const bear2: Bear = {
  name : 'honey bear',
  honey : true
}

📌 선언 병합 (Declaration Merging)

선언 병합이란 타입 선언 후 같은 타입을 아래에서 다시 선언했을 때 병합하는 것을 말한다.

interface는 선언 병합이 가능하지만, Type alias는 선언 병합이 불가능하다.

✴️ 예시

interface Animal {
  name : string;
}

interface Animal {
  honey : boolean;
}

const bear1: Animal = {
  name : 'honey bear',
  honey : true
}

📌 공통점

1. 클래스에 implements를 적용할 수 있다.

➡️ implements에 대해 학습한 후 추가 포스팅 예정

2. union을 사용해서 타입A와 타입B 중 하나가 될 수 있는 새로운 타입을 만들 수 있다.

타입A와 타입B는 type alias / interface 중 어떤 것으로 선언해도 상관없다.

이때, 새로운 타입은 무조건 type 으로 선언해야 한다!

interface Animal {
  name : string;
}

interface Bear {
  honey : boolean;
}

type NewType = Animal | Bear;

const bear1: NewType = {
  name : 'honey bear',
  honey : true
}
type Animal = {
  name : string;
}

type Bear = {
  honey : boolean;
}

type NewType = Animal | Bear;

const bear1: NewType = {
  name : 'honey bear',
  honey : true
}
profile
Hello, World

0개의 댓글