[typescript] 타입스크립트에서의 타입 호환성 검사 방법

타입스크립트는 타입 호환성을 검사하여 여러 타입 간의 할당이 가능한지를 판단합니다. 이를 통해 코드의 안정성을 유지하면서 유연한 타입 체크를 가능케 합니다.

기본적인 타입 호환성

타입스크립트에서는 기본적으로 할당하는 값의 타입이 할당받는 변수의 타입을 포함하면 호환 가능하다고 간주합니다. 즉, 할당받는 타입이 더 넓은 범위에 있어야 합니다.

interface Fruit {
  name: string;
}

let apple: Fruit;
let orange: { name: string, color: string };

apple = orange; // 에러: Property 'color' is missing
orange = apple; // 가능

위 코드에서 appleorange에 할당되지 않는 이유는 orange의 타입이 더 넓기 때문입니다.

함수 타입 호환성

함수의 타입도 호환성을 검사할 수 있습니다. 함수의 매개변수 타입과 반환 타입이 할당받는 함수의 타입을 포함하면 호환 가능합니다.

type CreateElementFn = (tag: string) => Element;

function createElement(tagName: string): HTMLElement {
  // ...
  return new HTMLElement();
}

let createElementFn: CreateElementFn = createElement; // 가능

함수의 매개변수 개수나 타입, 반환 타입이 다른 경우에는 호환되지 않습니다.

클래스 타입 호환성

클래스 간의 타입 호환성은 구조적으로 체크됩니다. 클래스의 인스턴스 멤버가 할당받는 클래스의 인스턴스 멤버를 포함하면 호환 가능합니다.

class Animal {
  name: string;
}

class Dog extends Animal {
  breed: string;
}

let animal: Animal;
let dog: Dog;

animal = dog; // 가능
dog = animal; // 에러: 'breed' 가 없음

타입 호환성 검사 방법 선택

타입 호환성은 코드 작성 시 유용한 기능이지만, 올바르게 이해하지 않으면 예기치 않은 동작을 유발할 수 있습니다. 따라서 코드를 작성할 때 타입 호환성을 신중히 고려해야 합니다.

타입 호환성 관련 더 많은 정보는 타입스크립트 공식 문서에서 확인할 수 있습니다.