[typescript] 타입스크립트에서의 하위 타입과 상위 타입의 관계

타입스크립트는 구조적 타입 시스템을 사용하며, 이는 두 개의 타입이 구조적으로 호환되는 경우에만 타입 호환성을 인정한다는 것을 의미합니다. 이에 따라 하위 타입과 상위 타입의 개념이 조금 다를 수 있습니다.

하위 타입과 상위 타입

하위 타입은 더 구체적인 하위 타입 값더 일반적인 상위 타입으로 할당될 수 있는 경우를 가리킵니다.

예를 들어,

class Animal {
  name: string;
}

class Cat extends Animal {
  purr: () => void;
}

let animal: Animal;
let cat: Cat;

animal = cat; // 허용
cat = animal; // 허용되지 않음

위의 예제에서 Animal이라는 상위 타입과 Cat이라는 하위 타입이 있습니다. 따라서 catanimal에 할당하는 것은 가능하지만, animalcat에 할당하는 것은 불가능합니다.

타입 호환성

타입스크립트에서의 하위 타입과 상위 타입의 관계는 주로 타입 호환성에 의해 결정됩니다. 타입 A가 타입 B에 할당 가능하다면, 타입 A는 타입 B의 하위 타입이거나 타입 B와 같은 타입입니다.

이때, 인터페이스와 클래스를 비교할 때, 클래스의 인스턴스는 해당 클래스와 그 하위 클래스에 호환되며, 인터페이스는 해당 인터페이스를 구현한 클래스에 호환됩니다.

interface Named {
  name: string;
}

class Person {
  name: string;
}

let p: Named;
p = new Person(); // 허용

위의 예제에서 Person 클래스는 Named 인터페이스를 구현했기 때문에, pPerson 클래스의 인스턴스를 할당하는 것이 가능합니다.

결론

타입스크립트에서는 구조적 타입 시스템을 따르며, 타입 호환성을 통해 하위 타입과 상위 타입의 관계를 결정합니다. 코드를 작성하거나 라이브러리를 사용할 때, 이러한 타입 호환성을 고려하여 타입을 정의하는 것이 중요합니다.

더 자세한 내용은 타입스크립트 공식 문서의 Advanced Types 섹션을 참고하시기 바랍니다.

타입스크립트 공식 문서