[typescript] 타입 가드 함수의 응용 예시

타입스크립트에서 타입 가드 함수를 사용하여 런타임 중에 변수의 타입을 검사하고, 정확한 타입으로 유추하도록 도와주는 다양한 상황들이 있습니다. 이번 글에서는 인터페이스 간의 연관성을 명확히 해주는 타입 가드 함수를 살펴보겠습니다.

상황 소개

예를 들어, 다음과 같이 CircleRectangle 두 가지 도형에 대한 인터페이스가 있습니다.

interface Circle {
  kind: "circle";
  radius: number;
}

interface Rectangle {
  kind: "rectangle";
  width: number;
  height: number;
}

그리고 이 도형들을 표현하는 Shape 타입이 아래와 같이 정의되어 있다고 가정해봅시다.

type Shape = Circle | Rectangle;

여기서 Shape 타입에 대한 추론된 값의 속성에 접근할 때, 타입 가드 함수를 사용하여 각 도형에 맞는 속성을 명확히 해주는 것이 유용할 수 있습니다.

타입 가드 함수 정의

이러한 상황에서 isCircle이라는 타입 가드 함수를 다음과 같이 정의할 수 있습니다.

function isCircle(shape: Shape): shape is Circle {
  return shape.kind === "circle";
}

타입 가드 함수 활용

이제 isCircle 함수를 사용하여 Shape 타입의 변수에 대한 타입을 구체화 시켜보겠습니다.

function getArea(shape: Shape) {
  if (isCircle(shape)) {
    // 여기서 shape의 타입은 Circle으로 변환됨
    return Math.PI * shape.radius ** 2;
  } else {
    // 여기서 shape의 타입은 Rectangle으로 변환됨
    return shape.width * shape.height;
  }
}

위의 예시에서, isCircle 함수를 통해 Shape 타입이 Circle으로 변환되어 정확한 속성에 접근할 수 있게 됩니다.

이처럼 타입 가드 함수를 활용하여 인터페이스 간의 연관성을 명확히 해주면, 코드의 가독성을 높이고 타입 안정성을 확보할 수 있습니다.

마치며

타입 가드 함수를 이용하여 변수의 동적인 타입 변환을 안전하게 지원할 수 있으며, 코드의 품질을 향상시킬 수 있는 다양한 방안이 있습니다. 타입스크립트의 강력한 타입 시스템을 활용하여 더욱 안정적이고 직관적인 코드를 작성하는 데 도움이 되길 바랍니다.