들어가며
타입스크립트에서는 타입을 명시하기 위해서 다음과 같이 어노테이션을 사용한다.
let username: string;
let age: number;
2
각각의 타입들은 여러 번 중복 사용할 경우, 매번 명시하는 방법보다는 한 개의 타입을 명시하고 공통된 이름으로 사용하는게 유지보수 측면에서 이점을 가진다.
타입스크립트에서는 타입 별칭(Type Alias)를 통해, 참조할 수 있는 타입 변수를 만들 수 있도록 지원한다.
타입 별칭(Type Alias)
타입 별칭은 특정 타입이나 인터페이스를 참조할 수 있는 타입 변수를 의미한다. 다음과 같이 기존 변수를 선언할 때 타입을 명시했던 것처럼 사용할 수 있다.
type Username = string;
type Age = number;
2
타입스크립트에서는 타입 별칭까지 추론을 하지는 않으므로, 변수를 선언할 때 타입 변수를 명시해야 한다.
let username: Username = "홍길동";
let age: Age = 20;
2
타입 별칭은 객체에도 적용할 수 있으며, 다음과 같이 정의할 수 있다.
type User = {
username: string;
age: number;
email: string;
};
2
3
4
5
타입 별칭에 제네릭의 사용도 가능하다.
type List<T> = T[];
const names: List<string> = ["유저1", "유저2", "유저3"];
const numbers: List<number> = [1, 2, 3, 4];
2
3
4
변수 선언과 마찬가지로 동일한 이름으로 여러 번 정의할 수는 없으며, let
, const
와 같이 블록 스코프를 가진다. 즉 외부에서 정의된 타입 변수는 다음과 같이 내부에서 재정의될 수 있다.
type Username = string;
if (true) {
type Username = number;
}
2
3
4
5
타입 별칭을 통해서 사용할 타입을 명시하는 작업은 이름만 재정의한다고 봐야하며, 선언한 타입 변수으로 새롭게 타입을 만드는 것은 아니다. 그리고 타입 별칭은 트랜스파일링 시, 영향을 미치지 않으며 타입 추론을 위해서만 사용된다.
즉 타입 별칭은 복잡한 타입을 반복하여 작성하지 않도록 해주며, 타입 변수를 정의함으로써 통해 어떤 목적으로 사용했는지 쉽게 이해할 수 있도록 도와준다.
주의점
타입 별칭과 인터페이스는 비슷하면서도 타입의 확장이 불가능하다는 가장 큰 차이점이 존재한다. 즉 타입 별칭을 사용해야 하는 경우를 제외하고는 확장 가능한 인터페이스로 선언하는 것을 권장한다.