타입 별칭은 특정 타입이나 인터페이스를 참조할 수 있는 타입 변수를 의미한다.
타입 별칭은 새로운 타입 값을 하나 생성하는 것이 아니라 정의한 타입에 대해 나중에 쉽게 참고할 수 있게 이름을 부여하는 것과 같다.
TypeScript의 유형 별칭은 기존 유형에 대한 새 이름을 만드는 방법이다. 기존 유형을 기반으로 하지만 다른 이름을 가진 새 유형을 정의하는 데 사용된다. 복잡한 유형을 단순화하거나 코드를 더 읽기 쉽게 만들거나 재사용 가능한 유형을 만드는 데 사용할 수 있다.
type Score = 'A' | 'B'| 'C' ;
// 문자열 리터럴을 사용하면 스코어 내부 값만 입력 가능
type PartialPointX = { x: number };
type PartialPointY = { y: number };
// intersection
type IntersectionPoint = PartialPointX & PartialPointY;
// union
// union 연산자를 사용한 타입의 경우에는 extends, implements 키워드 사용이 불가능
type UnionPoint = PartialPointX | PartialPointY;
// tuple
type Data = [number, string];
TypeScript의 인터페이스는 객체의 구조와 동작을 정의한다. 인터페이스는 객체의 모양과 객체가 가져야 하는 속성 및 메서드를 정의하는 데 사용된다. 즉, 인터페이스는 객체가 따라야 하는 규칙이나 약속을 정의한다.
타입스크립트에서의 인터페이스는 보통 다음과 같은 범주에 대해 약속을 정의할 수 있다.
-객체의 스펙(속성과 속성의 타입)
-함수의 파라미터
-함수의 스펙(파라미터, 반환 타입 등)
-배열과 객체를 접근하는 방식
-클래스
interface에서는 동일한 이름을 갖는 인터페이스를 중복하여 선언할 수 있다.
이를 선언 병합(Declaration merging)이라고 한다.
따라서, interface로 선언된 타입은 선언 이후의 타입 확장에도 용이하다.
(타입 alias는 동일한 이름의 타입을 선언하면 에러가 발생한다. 선언 이후에는 해당 타입의 내용을 변경할 수 없음을 의미한다.)
-> 한 마디로, 인터페이스는 재선언이 가능하지만 타입 별칭은 불가능.
인터페이스는 extends 키워드를 사용하여 명시적으로 기존 타입의 확장이 가능하다.
그럼 type alias로 선언된 타입은 extends 키워드를 사용한 확장이 불가능하다는 것일까?
아니다. 물론 type alias로 선언된 타입도 extends 키워드를 적용하여 타입 확장이 가능하다.
다만 type alias로 선언된 타입에 extends 키워드를 적용하여 새로운 type alias 타입을 선언하는 것은 불가능하다.
즐겁게 읽었습니다. 유용한 정보 감사합니다.