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

타입스크립트(TypeScript)에서는 다양한 유형의 값을 처리할 수 있도록 타입 가드(Type Guard)를 활용할 수 있습니다. 이를 사용하여 런타임에서의 값에 대한 정보를 타입 시스템에 전달할 수 있어, 다중 타입을 처리하는 방법을 알려드리겠습니다.

타입 가드를 이해하기

타입 가드란 런타임에 원시 타입 정보를 사용하여 타입을 추론하는 함수입니다. 주로 typeof, instanceof, in, Array.isArray 등을 사용하여 값을 분석하고 타입을 확인합니다.

function isNumber(value: any): value is number {
  return typeof value === 'number';
}

instanceof를 활용한 객체 타입 가드

인터페이스나 클래스로 정의된 여러 타입을 구분할 때 instanceof를 활용할 수 있습니다. 이를 통해 해당 객체가 특정 클래스의 인스턴스인지 여부를 확인할 수 있습니다.

class Dog {
  bark() {
    console.log('Woof!');
  }
}

class Cat {
  meow() {
    console.log('Meow!');
  }
}

function isDogOrCat(pet: Dog | Cat): pet is Dog {
  return (pet as Dog).bark !== undefined;
}

let animal: Dog | Cat = new Dog();

if (isDogOrCat(animal)) {
  animal.bark(); // 컴파일러가 animal을 Dog로 처리합니다.
} else {
  animal.meow(); // 컴파일러가 animal을 Cat으로 처리합니다.
}

사용자 지정 타입 가드

사용자 지정 타입 가드를 활용하여 타입을 세분화할 수도 있습니다. 다음은 유사 배열 객체를 구분하는 예제입니다.

interface ArrayLike {
  length: number;
}

function isArrayLike(obj: any): obj is ArrayLike {
  return typeof obj.length === 'number';
}

결론

타입 가드를 활용하여 타입 시스템을 더욱 유연하게 활용할 수 있습니다. typeof, instanceof, 사용자 지정 타입 가드 등을 활용하여 다중 타입을 처리하는 데 도움이 될 것입니다.

자세한 내용은 공식 TypeScript 문서를 참고하시기 바랍니다.