[typescript] 타입 가드 함수와 다른 타입스크립트 기능의 조합

타입스크립트는 정적 타입을 가진 자바스크립트의 확장된 언어로, 타입 가드 함수를 사용하여 변수의 타입을 좁히는 기능을 제공합니다. 이 기능은 조건문, 사용자 정의 타입 가드 함수, instanceof 연산자 등을 사용하여 구현할 수 있습니다.

타입 가드 함수란?

타입 가드 함수는 특정 조건을 만족할 때 해당 변수의 타입을 좁혀주는 함수를 말합니다. 이를 통해 코드 내에서 타입 안전성을 확보할 수 있습니다.

아래는 타입스크립트에서의 타입 가드 함수의 간단한 예시입니다.

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

let x: any = 10;

if (isNumber(x)) {
  console.log(x + 5);
}

타입 가드 함수와 조건부 타입의 조합

타입 가드 함수와 조건부 타입을 조합하여 더욱 강력한 타입 추론을 할 수 있습니다. 예를 들어, 다음과 같이 조건부 타입을 사용하여 null 또는 undefined를 제거하는 기능을 구현할 수 있습니다.

type NonNullable<T> = T extends null | undefined ? never : T;

function removeNullable(value: string | null | undefined): NonNullable<typeof value> {
  if (value === null || value === undefined) {
    throw new Error('Value cannot be null or undefined');
  }
  return value;
}

let result = removeNullable('Hello, TypeScript!');
console.log(result.toLowerCase());

타입 가드 함수와 추상 클래스/인터페이스의 조합

타입 가드 함수는 추상 클래스나 인터페이스와 함께 사용하여 이러한 추상화된 타입에 대한 구체적인 타입을 도출하는 데에도 유용하게 사용될 수 있습니다.

interface Animal {
  move(): void;
}

class Dog implements Animal {
  move() {
    console.log('Running');
  }

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

class Bird implements Animal {
  move() {
    console.log('Flying');
  }

  chirp() {
    console.log('Chirp! Chirp!');
  }
}

function isDog(animal: Animal): animal is Dog {
  return (animal as Dog).bark !== undefined;
}

function moveAnimal(animal: Animal) {
  if (isDog(animal)) {
    animal.move();
  } else {
    console.log('Cannot determine how to move the animal');
  }
}

let dog = new Dog();
let bird = new Bird();

moveAnimal(dog);
moveAnimal(bird);

이렇게 타입 가드 함수는 타입스크립트에서 다양한 곳에서 활용될 수 있으며, 다른 타입스크립트 기능과 함께 조합하여 보다 안전하고 효율적인 코드를 작성할 수 있게 도와줍니다.

위의 예제들을 통해 타입 가드 함수와 다양한 타입스크립트 기능을 함께 사용하는 방법에 대해 알아보았습니다. 이러한 기능들을 적절히 조합하여 타입 안전성을 확보하고 가독성이 높은 코드를 작성하는 데에 활용해보시기 바랍니다.

참고 자료