타입 단언이란 무엇이며 언제 사용하나요

타입 단언(Type Assertion)은 컴파일러보다 특정 값의 타입을 개발자가 더 잘 알고 있다고 알려주는 방법입니다. 개발자가 as를 이용해 타입을 단언하면 자동 추론된 타입을 더 구체적인 타입으로 다룰 수 있습니다.

예를 들어 DOM 요소를 가져오는 document.getElementById() 메서드의 반환 타입은 HTMLElement | null입니다. 하지만 개발자가 해당 요소가 HTMLDivElement임을 확신한다면 as HTMLDivElement를 사용해 컴파일러에게 명시적으로 알려줄 수 있습니다.

const element = document.getElementById("myElement") as HTMLDivElement;

element.style.backgroundColor = "blue";

타입 단언은 주로 API나 외부 라이브러리의 반환 타입을 확실히 알고 있을 때 사용합니다. 컴파일러가 타입 추론에 실패하거나 너무 넓은 타입으로 추론하는 상황에서 오해를 줄이고 속성에 접근할 수 있게 해줍니다.

타입 단언을 사용할 때 주의할 점

타입 단언은 컴파일러의 타입 검사를 우회하기 때문에, 실제 값이 단언한 타입과 다르면 런타임 오류가 발생할 수 있습니다. 따라서 단언은 해당 타입을 확실히 알고 있을 때만 사용하는 것이 좋습니다.

가능하다면 타입 단언보다 타입 좁히기(narrowing)를 우선 활용하는 편이 더 안전합니다.

function printLength(value: string | string[]) {
  if (Array.isArray(value)) {
    console.log(value.length);
  } else {
    console.log(value.length);
  }
}

또한 타입 가드를 활용하면 데이터 구조를 확인하면서 타입 안정성을 높일 수 있습니다.

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

if (isFish(pet)) {
  pet.swim();
}

타입 단언은 최소한의 범위에서만 사용하는 것이 좋습니다. 전체 객체보다 필요한 속성이나 특정 분기에서만 단언하면 불필요한 위험을 줄일 수 있습니다.

CSLOG에서 보기