인터페이스 vs Type Alias

Tags
interface
type alias
부가 설명
- 구현이 필요한 부분이 있다면 interface - 저장될 데이터 형식에는 type alias - 서로만이 가능한 기술적 측면의 차이도 다룸.
비고

어떤 것을 어느 상황에?

  • 인터페이스로 할 수 있는 것을 타입으로도 할 수 있고,
  • 타입으로 할 수 있는 것을 인터페이스로도 할 수 있는 경우가 많다.
어떤 순간에 뭘 써야할까?

1) 개념적 측면

서로 비슷한 행위를 할 순 있지만, 코드만 딱 놓고 봤을 때 의미가 바로 와닿는게 중요하다고 생각함.
  • 무언가 구현을 해서 써야하는 부분이 있다면 인터페이스
  • 단순히 저장될 데이터 형식를 지정하는 용도라면 타입

2) 기술적 측면

2-1) 인터페이스만 가능

  • 인터페이스 병합(merge)는 인터페이스만 가능. ( 타입은 중복에러 뜬다. )
    • 즉, 어디에서나 동일한 이름으로 인터페이스를 선언하면 컴파일 시 합쳐져서 하나의 인터페이스가 된다.
      interface Box { height: number; width: number; } interface Box { scale: number; } // height, width, scale 다 넣어야함. let box: Box = {height: 5, width: 6, scale: 10};

2-2) 타입만 가능

  • 유니온 타입 ( type Direction = 'left' | 'right' | 'up' | 'down'; )
  • computed property
    • type Person = { name: string, age: number } type Name = Person['name']; // Name : string type
 

결론 type or interface ?

정해진 건 없음. 다만 규칙을 정한 후에는 그대로 쭉 통일시키는 것이 좋음.

방법 1

  1. 구현이 필요한 부분은 interface로 선언한다.
  1. 변화되지 않는 정적인 타입은 type으로 선언한다.

방법2 ( 이 방법이 권장되는 방식?? )

  1. 대부분의 상황에서는 interface를 사용하여 타입을 정의한다.
  1. uniontype이 필수적인 상황에서만 type으로 선언한다.