Typescript - Any와 Unknown의 차이
typescript
로 코딩을 하다가 어떤 타입인지 정의 내리기 힘든 상황에서 주로 any
를 사용한다.
물론 typescript
의 성격상 any
는 지양하는 것이 좋다.
오류를 검증하고 확인하려는 특성으로 엄격한 타입을 지정하려는 typescript
에서 어떤 타입이나 가능하다는 성격의 any
는 어쩌면 존재 자체가 모순인 타입이기도 하다.
하지만코딩을 하다보면 아직은 타입을 정하기 전인 상황이거나, 도저히 타입을 알 수 없거나 추론할 수 없을 때, (또는 typescript 초급자일 때 ;;) 가끔 사용하게 되는 것이 또 any
타입이다.
하지만 이제부터 이럴때 any
보다는 unknown
을 사용하자.
이 둘의 정의는 마치 undefined
와 null
의 관계와도 비슷하다.
얼핏 비슷해보이지만 확실하게 다른 정의이다.
any
는 어떤 타입도 상관 없으며 어떤 식으로 내보내져도, 그리고 내보내진 타입을 어떤 곳에서 받아들이게 되더라도 상관이 없는…
typescript의 엄격모드로부터 해방시켜주는 타입의 역할을 한다.
unknown
은 any
와는 달리 어떤 타입인지 모르겠다는 의미이다.
즉, 단어 해석 그대로 any
가 ‘아무거나’라면, unknown
은 ‘아직 모름’이라 뜻!
차이는 다음과 같다.
|
|
any
로 지정한 변수가 다른 타입인 숫자와 연산이 가능한 반면,
unknown
으로 지정한 변수는 숫자와 연산이 불가능하다.
즉, unknown
은 어떤 타입이라도 적용할 수 있지만,
타입이 정의내려진 다른 변수 c와 함께 적용시 c의 타입에서 타입 엄격모드가 발동하며 에러를 낸다.
any
의 경우에는 이러한 타입 엄격모드를 마치 꺼놓은듯 typescript의 무장을 해제시키고 코드 진행이 가능하다.
따라서 디버깅을 하며 파일의 오류나 코드 흐름을 쫓을때, any
보다는 unknown
을 사용하는 것이 타입흐름의 통제에 있어 훨씬 낫다는 판단이 든다.
Related Content
- Node.js 백엔드TypeScript + TypeORM으로 무한 대댓글 가공하기
- Typescript - Satisfies Operator 탐구
- 백엔드 - Typescript-Express 환경에서 Jest 및 Node 환경에 따라 Dotenv 설정 분리
- Error Log - TypeORM을 DotEnv로 연결하여 설정시 TypeScript에서의 Type Error
- Typescript - Typeorm 연결 오류 해결