TYPESCRIPT

[Typescript] 타입 단언 (Type Assertion)

seominki 2024. 9. 23. 10:08

타입 단언은 타입스크립트의 타입 추론에 기대지 않고 개발자가 직접 타입을 명시하여 타입을 강제로 주입하는 것을 의미합니다.

타입 단언의 장점

  • 컴파일러에게 더 정확한 타입 정보 제공: 자동으로 추론되지 않는 타입을 명시적으로 알려줌
  • 유욘한 타입 변환: 값의 타입을 원하는 대로 변환하거나 좁힐 수 있음
  • 타입 안정성 향상: 개발자가 해당 값이 특정 타입임을 확신 할 수있는 경우 컴파일러에 타입 오류 방지 가능

사용법

const num = 3 as number;

interface Member {
  name: string;
  id: string;
  age: number;
}

const member1: Member = {}; // 빈 객체로 선언하게 되면 에러가 남
const merber2 = {} as Member; // 빈 객체로 선언했지만 객체에 들어갈 속성은 Member 인터페이스 속성이라고 타입스크립트 컴파일러에 말해 주는 효과

타입 단언을 사용해야 할 상황

  • 컴파일러가 타입을 추론할 수 없을 때
const someVal: any = "문자열입니다";
const strLength: number = (someVal as string).length;
  • 외부 API나 라이브러리에서 데이터를 가져올 경우
interface UserData {
  id: string;
  name: string;
}

const rs: any = fetchUserData();
const user = rs as UserData;
  • DOM 조작 시 (구체적인 타입으로 좁혀야 할 때)
const inputEl = document.getElementById("user-id") as HTMLInputElement;
  • 타입을 확신하는 상황
function getStrLength(value: string | number): number {
  if ((value as string).length) {
    return (value as string).length;
  } else {
    return value.toString().length;
  }
}

타입단언 사용 시 주의사항

타입단언은 타입스크립트 컴파일러보다 타입에 대한 정보가 확신될 경우 사용하는것이 좋으며 단언을 하게되면 컴파일러측에서는 사전에 에러방지를 못하게 됩니다.