본문 바로가기
Typescript

[Typescript] Type vs Interface

by 떤떤 2023. 12. 15.

전 직장에서 typescript를 사용하기 시작하면서 팀원들과 type 사용 방식이 각각 달랐습니다. 저는 interface를 사용하다가 utility type을 사용해야 할 때는 type을 사용했었는데 그땐 그냥 필요해서 사용했지 어떤 기준으로 사용해야할지에 대해 찾아보진 않았던 것 같습니다.

 

그러다가 최근 개인 프로젝트를 진행하면서 찾아보게 되었는데요. 정리하면 좋을 것 같아서 글을 씁니다.

 

github에서 유명한 typescript 프로젝트들을 봤을 때 type과 interface를 섞어서 쓰고 있더라구요.

이렇게 되면 더욱 고민이 됩니다. 그들은 무슨 기준으로 선언을 하는 걸까요 ?

 

우선 type, interface 에 대한 간략한 설명을 먼저 보겠습니다.

 

type

- 새로운 타입을 정의하고 일반적으로 객체의 구조를 정의할 때 사용

- 주로 유니온 타입, 인터섹션 타입, 제네릭 타입, 리터럴 타입 등을 정의할 때 사용

type Result = number | string; // union type

type Animal = {
  name: string;
  age: number;
};
type Bear = Animal & { honey: Boolean }; // intersection type으로 타입 확장

 

interface

- 객체의 구조를 정의하고 주로 클래스나 객체의 형태를 명세할 때 사용

- extends, implements를 사용해서 확장, 구현 할 수 있음

interface Animal {
  name: string;
  age: number;
}
interface Bear extends Animal {
  honey: boolean;
}

interface Shape {
  draw(): void;
}

 

그냥 다 interface로 사용하면 되는 거 아닐까라는 생각을 했는데 타입스크립트 공식문서에도 개인적 선호에 따라 인터페이스와 타입 중에 선택해서 사용할 수 있고, 잘 모르겠다면, 우선 interface를 사용하고 이후 문제가 발생하였을 때 type을 사용하라고 적혀있었습니다.

 

역시 코드의 일관성과 적절하게 사용하는 것이 중요한 것 같습니다.

결국 interface를 사용하고 utility type을 사용해야 하는 경우가 발생하면 그때 type을 사용하면 될 것 같습니다.

 

공식문서 참고 링크

https://www.typescriptlang.org/docs/handbook/2/everyday-types.html