본문 바로가기

Typescript

unknown 타입과 any의 차이

unknown 타입이란 무엇일까?

unknown 타입이란 ‘알 수 없는 타입’을 의미한다. 그래서 아직 타입을 모를 때 사용한다.

let value: unknown;

value = "Hello";
value = 42;
value = true;

if (typeof value === "string") {
  console.log(value.toUpperCase()); // 정상 동작
}

 

any와도 많이 비교가 되는데, 차이점은 아래처럼 요약해볼 수 있다.

  모든 타입 할당 가능 타입 검사 필요
any 가능 필요 없음
unknown 가능 필요

 

unknown 타입을 왜 사용할까?

 

타입 안정성 보장하기 때문이다. any를 사용하면 어떤 타입이든 허용되기 때문에 런타임 오류가 발생할 수 있다. unknown을 사용하면 타입 검사를 강제하기 때문에 안정성을 높인다. 즉, 해당 값을 바로 사용할 수 없고 타입 검사를 해야한다.

let anyValue: any = "Hello";
let unknownValue: unknown = "Hello";

// ✅ `any`는 타입 검사가 없어도 동작함 (비추천)
console.log(anyValue.toUpperCase()); // "HELLO"

// ❌ `unknown`은 바로 사용하면 오류 발생
// console.log(unknownValue.toUpperCase()); // ⚠️ TypeScript Error!
if (typeof unknownValue === "string") {
  // 타입 검사를 하면 정상적으로 사용할 수 있음
  console.log(unknownValue.toUpperCase()); // "HELLO"
}

 

결론

 

결론적으로, any의 사용은 최대한 지양하고, unknown 타입을 사용함으로써 타입을 먼저 검사하여 예상치 못한 오류를 줄여야 한다!