[typescript] 타입 별칭과 인터페이스의 타입 호환성과 변환 방법

본 포스트에서는 TypeScript에서 타입 별칭과 인터페이스의 차이점과 각각의 타입 호환성과 함께 사용하는 방법에 대해 알아보겠습니다.

타입 별칭(Type Aliases)과 인터페이스(Interfaces)의 차이점

먼저, 타입 별칭과 인터페이스의 주된 차이점은 가능한 경우에는 인터페이스를 사용하고, 확장 가능성이 있을 때는 인터페이스보다는 타입 별칭을 사용한다는 것입니다. 또한, 동일한 이름으로 여러 번 선언해도 컴파일러가 자동으로 병합해주는 인터페이스와 달리, 타입 별칭은 복잡한 교차 및 유니온 타입을 지원한다는 장점이 있습니다.

타입 별칭(Type Aliases)

타입 별칭은 기존에 존재하는 타입의 이름을 붙여서 사용할 수 있도록 도와주는 기능입니다. 주로 유니온 타입, 인터섹션 타입, 객체 타입, 함수 타입 등을 간결하게 표현할 때 활용됩니다.

type Person = {
  name: string;
  age: number;
};

type Player = Person & {
  position: string;
};

인터페이스(Interfaces)

인터페이스는 객체의 구조를 정의하는데 사용되며, 복잡한 구조 또는 클래스의 구조를 명세하는 데 활용됩니다.

interface Car {
  brand: string;
  model: string;
  year: number;
  start: () => void;
}

타입 호환성과 변환 방법

타입 호환성은 한 타입이 다른 타입으로 변환될 수 있는지를 나타냅니다. TypeScript에서는 구조적 타입 시스템을 사용하기 때문에, 인터페이스와 타입 별칭은 서로 호환 가능합니다.

interface Dog {
  name: string;
  breed: string;
}

type Animal = {
  name: string;
};
let dog: Dog = { name: "Fido", breed: "Golden Retriever" };
let animal: Animal = dog; // 타입 호환 가능

타입 변환은 타입을 서로 호환 가능하게끔 변환시키는 것을 말합니다. 인터페이스와 타입 별칭은 as 키워드를 사용하여 변환 가능합니다.

let animal: Animal = { name: "Fido" };
let dog: Dog = animal as Dog; // 타입 변환 가능

마치며

타입 별칭과 인터페이스를 적재적소에 활용하여 TypeScript 코드를 작성하는 것은 중요합니다. 타입 호환성과 변환 방법을 잘 이해하고 활용하여 유연하고 안정적인 코드를 작성할 수 있도록 노력하시기 바랍니다.

참고문헌: TypeScript 공식 문서