[TypeScript] 타입 단언

kjy0124·2026년 2월 18일
post-thumbnail

🎯 타입 단언

✅ 사용 예시

TypeScript의 타입 추론을 개발자가 강제로 지정해주는 것

1️⃣

type Person = {
  name: string;
  age: number;
};

let person: Person = {} as Person;
person.name = "kjy";
person.age = 27;
  • 위 코드는 person 객체를 빈 객체 {}로 초기화하면서 as Person을 사용해 Person 타입으로 단언한 코드
  • 원래 {}Person 타입이 아니기 때문에, TypeScript는 오류를 발생
  • 이를 해결하기 위해 as Person을 사용하여 컴파일러에게 해당 객체가 Person 타입이라고 강제로 지정

2️⃣

type Dog = {
  name: string;
  color: string;
};
let dog = {
  name: "돌돌이",
  color: "white",
  breed: "포메라니안",
} as Dog;
  • Dog 타입에는 namecolor만 존재
  • 하지만 객체에는 breed라는 추가 프로퍼티가 포함
  • 원래라면 초과 프로퍼티 검사(Excess Property Check)로 인해 에러가 발생
  • 그러나 as Dog를 사용함으로써 TypeScript의 타입 검사를 우회하여 에러가 발생하지 않음

✅ 타입 단언의 규칙

단언식 : as 단언
A as B

  • A가 B의 슈퍼타입이거나
    A가 B의 서브타입이어야 함

⭕️ 올바른 사용

let num1 = 10 as never; // A가 B의 슈퍼타입
let num2 = 10 as unknown; // A가 B의 서브타입

⚠️ 주의사항

let num3 = 10 as string;
  • 위 코드는 겹치는 부분(교집합)이 없기 때문에 오류가 발생
  • 하지만 아래 코드와 같이 number 타입의 슈퍼타입인 unknown도 함께 단언해준다면 오류는 사라짐
let num3 = 10 as unknown as string;
  • 위 코드와 같이 단언을 중첩으로 하는 것을 다중단언이라 칭함.

✅ Const 단언

어떠한 변수를 선언했을 때 const로 선언한 것과 동일한 효과를 보도록 만들어주는 것

let num4 = 10 as const;
  • const를 사용하게 될 시 수정 불가능

✅ Non Null 단언

어떤 값이 null이거나 undefined이 아니라고 컴파일러에게 알려줌

type Post = {
  title: string;
  author?: string;
};

let post: Post = {
  title: "게시물1",
  author: "KJY",
};

const len: number = post.author?.length;

⚠️ 주의사항

  • 마지막 줄 author?를 적게 되면 아래와 같은 오류가 발생.

  • 이유는 author가 없으면 전체가 undefined가 되어버리기 때문

  • 이를 해결하기 위해 ?!로 바꿔주면 됨


출처

한 입 크기로 잘라먹는 타입스크립트
https://www.inflearn.com/course/한입-크기-타입스크립트/dashboard

profile
개발 공부...

0개의 댓글