[typescript] 타입 가드를 사용하여 다중 타입을 처리하는 방법을 알려주세요.

다중 타입을 처리하기 위해 타입 가드를 사용하는 방법에 대해 알아보겠습니다. 타입 가드는 특정 조건을 만족하는 타입들을 구분하여 처리할 수 있게 도와줍니다.

타입 가드란 무엇인가요?

타입 가드(Type Guard) 는 TypeScript에서 변수의 타입을 좁히는 것을 도와주는 방법입니다. 보통 조건부 타입을 사용하여 구현되며, 여러가지 타입을 다룰 때 유용하게 활용할 수 있습니다.

typeof 타입 가드

가장 간단한 타입 가드 중 하나는 typeof 를 사용하는 것입니다. 예를 들어, 다음과 같은 상황에서 typeof를 사용하여 타입을 가드할 수 있습니다.

function printText(text: number | string) {
  if (typeof text === "string") {
    console.log(text.toUpperCase());
  } else {
    console.log(text);
  }
}

위 코드에서 typeof text === "string" 을 통해 text 의 타입을 가드하고 있습니다.

instanceof 타입 가드

객체의 인스턴스 타입을 체크하여 타입을 가드할 수도 있습니다. 다음은 instanceof를 사용한 예제입니다.

class Car {
  // ...
}

class Bike {
  // ...
}

function moveVehicle(vehicle: Car | Bike) {
  if (vehicle instanceof Car) {
    console.log("Driving a car");
  } else {
    console.log("Riding a bike");
  }
}

위 예제에서 instanceof를 이용하여 vehicle의 타입을 가드하고 있습니다.

사용자 정의 타입 가드

타입스크립트에서는 사용자가 직접 작성한 함수를 사용하여 타입을 가드할 수 있는 사용자 정의 타입 가드도 가능합니다. 이렇게 하면 좀 더 복잡한 조건에 맞게 타입을 가드할 수 있습니다.

interface Bird {
  fly(): void;
  layEggs(): void;
}

interface Fish {
  swim(): void;
  layEggs(): void;
}

function isFish(pet: Bird | Fish): pet is Fish {
  return (pet as Fish).swim !== undefined;
}

function getPet(pet: Bird | Fish) {
  if (isFish(pet)) {
    return "Fish";
  } else {
    return "Bird";
  }
}

위의 예제에서 isFish 함수는 pet의 타입을 가드하는 사용자 정의 타입 가드입니다.

요약

이렇게 다양한 방법으로 타입 가드를 활용하면 다중 타입을 처리하는데 유용합니다. typeof, instanceof, 사용자 정의 타입 가드 등을 통해 조건부 타입을 활용하여 타입을 좁힐 수 있습니다.

더 자세한 내용은 TypeScript 공식 문서에서 확인할 수 있습니다.