오늘 주제는 typescript
에서 interface
와 매우 흡사한, type-aliases
를 다뤄보려고 합니다.
갑시다.
Type-Aliases
란?타입스크립트 공식 문서에는 Type-aliases
의 정의를 다음과 같이 하고 있습니다.
Type aliases
create a new name for a type. Type aliases are sometimes similar tointerface
s, but can name primitives, unions, tuples, and any other types that you’d otherwise have to write by hand.
구체적인 예시를 들어보겠습니다.
type PersonInfo = {
name: string,
age: number;
}
let seho1: PersonInfo = {
name: "세호",
age: 30
}
위와 같이 name
와 age
라는 객체들을 가진 PersonInfo
라는 별명으로 붙이는 작업입니다.
또한 아래와 같이 기본형에도 별명을 붙일 수가 있습니다.
type Name = string;
type Age = number;
type CombineNumberString = string | number;
type User = {
name: string;
heihgt: number;
}
interface
와의 관계너무 비슷하다. interface
와 type-aliases
는.
그렇다면 어떤 점이 다르고, 어떤 상황에서 각각을 써야 현명할지 고민해보자.
interface
와 Type-aliases
의 차이점거두절미하고 바로 차이점을 나열하려고 한다.
interface
는 새로운 타입 이름을 만든다. 즉, 에러 메세지에서 생성한 interface
가 리터럴로 찍혀나온다.type-aliases
는 그렇지 못하다. 생성한 별명으로 찍혀나오지 않는다.extends
가 되는가?interface
는 상속의 개념이 통한다. 이 곳에서 그 내용을 확인 할수 있다.type-aliases
는 확장이 불가능하다. merge declaration
이 가능한가?interface
는 가능하지만,type-aliases
는 불가능하다. merge delcaration
이란,
interface Box {
height: number;
width: number;
}
interface Box {
scale: number;
}
let box: Box = { height: 5, width: 6, scale: 10 }
위와 같은 코드가 가능함을 뜻한다. 같은 이름으로 여러번 선언을 할 수 있고, 그 내용이 Union 개념처럼 작동한다.
간단하다.
똑 부러지게 상황별로 나뉘어져 있는 것 같진 않다. 다만, 대부분의 경우 2가지를 추천한다.
어지간하면, interface
를 사용해라.
외부에 공개할 API
는 Interface
사용해라.
merge declaration
을 위해. 약간은 헷갈리는 개념인 interface
와 type-aliases
를 정리해보았다.
틈틈히 변경되거나 / 수정사항이 생길 것도 하다. 그때마다 수정해야지.
틀린내용이나 수정사항이 발견되면 언제든지 댓글로 알려주세요.
감사합니다. 🙏