타입스크립트에서 타입을 별도로 선언하는 방법으로는 interface와 type alias가 있는데
이 둘에 대해서 간단하게 알아보려고 합니다.
타입을 표현할 때
- interface는 reference type의 타입을 표현한다.
- type alias는 primitive type, reference type 타입을 모두 표현할 수 있다.
타입을 중복 정의할 때
- interface는 선언 병합(declaration merging)이 된다.
- type alias는 에러가 발생한다.
타입을 확장할 때
- interface는 extends 키워드를 사용한다.
- type alias는 &(intersection) 연산자를 사용한다.
내부 동작을 제외하고 사용하는 관점에서는 이런 차이들이 있는 것 같습니다.
그래서 뭘 쓰면 좋을까요?
저는 프로젝트내에서 통일해서 사용한다면 뭐든 좋다고 생각합니다.
다만 개인적인 생각에는 interface를 사용할 수 있는 경우에는 interface를 사용하고 그 외에는 type alias를 사용하는 것을 선호하는데요.
저는 interface라는 키워드가 주는 의미가 특정 모듈을 어떻게 사용해야 하는지에 대한 명세서와 같다고 생각하고 있습니다.
리액트 컴포넌트의 props를 예로 들면 해당 컴포넌트에 어떤 값을 전달해서 사용하면 되는지 명시하고 있는 것이라고 볼 수 있겠네요.
개인적인 감상이지만, type alias는 정말 값의 자료형이 어떻게 되는지를 묘사하는 느낌이고 interface는 해당 모듈을 어떻게 사용해야 하는지 설명하고 있는 느낌이라 저는 가능하다면 interface를 쓰고 유니온 타입, 튜플 타입, 리터럴 타입 등은 type alias로 작성할 것 같습니다.
'개발 > TypeScript' 카테고리의 다른 글
[TypeScript] tsconfig.json 이해하기 (0) | 2023.08.26 |
---|---|
[TypeScript] 매일매일 #4 (0) | 2022.03.18 |
[TypeScript] 매일매일 #3 (0) | 2022.03.17 |
[TypeScript] 매일매일 #2 (0) | 2022.03.16 |
[TypeScript] 매일매일 #1 (0) | 2022.03.16 |