Item 42 모르는 타입의 값에는 any 대신 unknown을 사용하기

any가 강력하면서 위험한 이유

  • 어떠한 타입이든 any 타입에 할당 가능하다.

  • any 타입은 어떠한 타입으로도 할당 가능하다.

unknownany 대신 쓸 수 있다

unknown 타입은 앞에서 언급한 any의 첫 번째 속성은 만족하지만, 두 번째 속성은 만족하지 않는다.

(번외) never은?

neverunknown과 정반대다. any의 첫 번째 속성은 만족하지 않지만, 두 번째 속성은 만족한다.

unknown 사용하기

어떠한 값이 있지만 그 타입을 모르는 경우에 unknown을 사용하면 좋다.

unknown 타입을 사용하려면 as 타입 단언을 이용해 적절한 타입으로 변환하도록 강제해야 한다.

object 또는 {}unknown과 차이가 있다

object 또는 {}를 사용하는 방법 역시 unknown만큼 범위가 넓은 타입이지만, unknown보다는 범위가 약간 좁다.

  • {} 타입은 nullundefined를 제외한 모든 값을 포함한다.

  • object 타입은 모든 비기본형(non-primitive) 타입으로 이뤄진다. 여기에는 true 또는 12 또는 "foo"가 포함되지 않지만 객체와 배열은 포함된다.

Key Points

unknown 타입이 도입되기 전에는 {}가 더 일반적으로 사용되었지만, 최근에는 {}를 사용하는 경우가 꽤 드물다.

정말로 null, undefined가 불가능하다고 판단되는 경우만 unknown 대신 {}를 사용하면 된다.

Summary

  • unknownany 대신 사용할 수 있는 안전한 타입이다. 어떠한 값이 있지만 그 타입을 알지 못하는 경우라면 unknown을 사용하면 된다.

  • 사용자가 타입 단언문이나 타입 체크를 사용하도록 강제하려면 unknown을 사용하면 된다.

  • {}, object, unknown의 차이점을 이해하자.

Last updated