[typescript] 타입 가드 사용시 주의사항

타입스크립트에서 타입 가드를 사용하면 코드의 안정성을 높일 수 있지만, 몇 가지 주의사항이 있습니다. 이 글에서는 타입 가드를 사용할 때 주의해야 할 사항에 대해 알아보겠습니다.

1. 타입 병합

타입 가드를 사용할 때 주의해야 할 점 중 하나는 타입 병합입니다. 타입 병합은 두 개 이상의 타입을 하나로 병합하는 것을 의미합니다. 타입 가드를 사용하다 보면 여러 조건에 따라 다른 타입을 반환하는 경우가 있는데, 이때 타입이 병합되는 것을 방지해야 합니다.

잘못된 예시:

interface Bird {
  fly: boolean;
  layEggs: boolean;
}

interface Fish {
  swim: boolean;
  layEggs: boolean;
}

function getPet(): Bird | Fish {
  // ...
}

let pet = getPet();
if (pet.layEggs) {
  // Error: Property 'swim' does not exist on type 'Bird | Fish'.
  // Property 'swim' does not exist on type 'Bird'.
  pet.swim;
}

올바른 예시:

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

let pet = getPet();
if (isFish(pet)) {
  pet.swim;
}

2. 타입 단언

타입 가드를 사용하다 보면 타입 단언을 남발하는 경우가 있는데, 이는 가급적 피해야 합니다. 타입 단언은 컴파일러에게 “내가 확신한다”고 알리는 것이기 때문에 신중히 사용해야 합니다.

잘못된 예시:

function getStringLength(str: string | null): number {
  if (str === null) {
    return 0;
  }
  return str.length; // Error: Object is possibly 'null'.
}

올바른 예시:

function getStringLength(str: string | null): number {
  if (str === null) {
    return 0;
  }
  return str.length as number; // Type assertion
}

결론

타입 가드를 사용할 때에는 타입 병합과 타입 단언에 주의해야 합니다. 이를 통해 코드의 안정성을 높일 수 있고, 타입 안전성을 유지할 수 있습니다.

더 많은 정보는 타입스크립트 공식 문서를 참고하세요.