[타입스크립트] any, unknown

비얌·2024년 1월 5일
1

타입스크립트

목록 보기
2/2
post-thumbnail

📖 개요

'타입스크립트 프로그래밍' 도서와 제로초님의 '타입스크립트 올인원' 강의를 보고 any, unkown 타입의 개념에 대해 알아보았다.

그리고 둘의 차이점이 무엇인지, 또 왜 any 대신 unknown이 권장되는지도 알아보았다.

📜 내용

🌊 any

  • 특정 값으로 인해 타입 오류가 발생하기를 원치 않을 때 쓰는 특수한 타입이다.
  • 타입을 미리 알 수 없는 값이 있을 때 사용한다.
  • 타입스크립트에서 any를 쓰면 자바스크립트처럼 타입이 검사되지 않는다.

any 예시

let a: any = '1'; // any
let b: any = 1; // any
let c = a + b; // any 에러 안남

🌊 unknown

  • any처럼 타입을 미리 알 수 없는 값이 있을 때 사용한다.
  • 타입을 검사해 정제(refine)하기 전까지는 타입스크립트가 unknown 타입의 값을 사용할 수 없다.
  • error가 대표적인 unknown 타입이다.

unknown 예시

// 지금은 30이지만 
// 나중에 어떤 타입이 될지 몰라서 unknown 타입으로 지정한 상황
let a: unknown = 30; 

// true 
// unknown 타입인 값과 아닌 값 비교 가능
let b = a === 30; 

// 에러가 난다
// 에러메시지: 'a' is of type 'unknown'
let c = a + 10; 

// 타입을 정제했기 때문에 에러가 나지 않는다
if (typeof a === 'number') {
    let c = a + 10; // number
}

unknown 실제 사용 예시

아래의 isNil 함수는 param을 입력받아서 해당 param이 null이나 undefined인지를 체크해서 true/false를 리턴하는 함수이다.

이 경우 param은 단순히 null, undefined인지에 대한 체크만 하기 때문에 어떠한 타입이 들어올지 몰라도 되므로 unknown을 사용할 수 있다.

const isNil = (param: unknown): boolean => param === null || param === undefined

출처: https://techblog.woowahan.com/9804/#toc-2

🌊 any와 unknown의 차이점

  • any는 어떤 타입이든 될 수 있고, 이후 어떤 동작이든 할 수 있다. unknown은 어떤 타입이든 될 수 있지만, 그 이후는 어떤 동작도 허용하지 않는다.
  • unknown은 any와 다르게 사용하는 쪽에서의 방어처리를 해서 안전하게 사용가능하다.

🌊 왜 any 대신에 unknown을 써야하는가?

  • any는 아예 타입이 검사되지 않기 때문에 타입스크립트를 쓰는 이유가 없어진다. 그래서 타입을 정제해야 하는 unknown을 쓰는 것이 권장된다.
profile
🐹강화하고 싶은 기억을 기록하고 공유하자🐹

0개의 댓글