개발/기타

Interface vs Type 무엇을 써야하나 ?

JonghwanWon 2023. 4. 9. 23:59

interface를 써야한다. type을 써도 괜찮다. 이에 관한 의견 차이가 약간 있었고, 이에 타입 선언 규칙을 정리했다.

그래서 무엇을 쓰는게 좋은건가?

나는 사실 Declaration Merging이 필요한 경우를 제외하곤 Type alias만을 사용하는 쪽이긴 한데 깊게 들어가서 차이를 비교해보니, interface를 적절히 사용함으로써 개념적인 정리와 이해에 대한 장점이 있었고 (프로젝트마다 다르겠지만)성능적인 이점도 있는 것을 알게 되었다.

결론은.. "객체" 에 대해서 interface를 선호하고, Inheritance 관련한 부분 이외엔 type을 사용하는 쪽으로 정리했다. 😄

이 글은 그 정리에 대한 결과이다.

 

Primitive types

💡 Primitive types을 사용할 때 type 키워드를 사용한다.

 

Tuple types

💡 Tuple types를 사용할 때 type 키워드를 사용한다.

 

Function types

💡 Function Types는 type 키워드를 사용한다.

 

Union types

💡 Union types는 type 키워드를 사용한다.

 

Object types

💡 Object Types은 interface 를 사용한다. 단, 객체에서 함수를 오버로드할 때 에는 type 키워드를 사용할 수 있다.

 

Declaration Merging

interface Window {
  foo: string;
}

window.foo // ✅

⭐️ interface의 선언은 병합될 수 있기 때문에 interface는 type보다 JavaScript 객체의 특성을 더 잘 나타내므로 interface를 사용한다.

 

Intersection vs Inheritance

참고 - Performance, TypeScript Wiki

 

Performance

TypeScript is a superset of JavaScript that compiles to clean JavaScript output. - microsoft/TypeScript

github.com

 

⭐️ interface를 사용하면, sub type(하위 유형)이 super type(상위 유형)에 선언된 type과 일치해야 하기 때문에 type 키워드의 사용을 허용한다.

 

Mapped object types

💡 매핑된 객체 유형을 활용하는 경우 type 키워드를 사용한다.