[TIL] 241023_Typescript: any와 unknown의 차이는?

지코·2024년 10월 24일
0

Today I Learned

목록 보기
38/66
post-thumbnail

오늘은 "한입 크기로 잘라 먹는 타입스크립트"의 섹션3,
타입스크립트의 기본 타입들을 복습하며 그 중 anyunknown 의 차이에 대해 구체적으로 알아보았다.

⚡️ any

  • 특정 변수의 타입을 확실히 모를 때 사용.
  • 어떤 값이든 할당 가능. 메서드도 제약 없이 사용 가능.

😵 문제점

  • 타입 검사를 런타임에 실행하기 때문에, 오류 또한 런타임에 확인 가능.
let anyVar: any = 10;
anyVar = "hello";
anyVar = true;

위와 같이 any 타입으로 선언한 변수 anyVar는 number 타입의 값도, string 타입의 값도, boolean 타입의 값도 모두 할당 가능하다.

let num: number = 10;
num = anyVar;

또한 어떤 타입의 변수에든 any 타입 변수의 값을 할당 가능하다.

⚡️ unknown

  • 어떤 타입의 값이든 할당 가능. ➡️ any 타입과 같음.
  • 어떤 타입의 변수에든 할당 불가능. 메서드 사용도 불가능. 연산도 불가능.
let unknownVar: unknown;
unknownVar = "";
unknownVar = 1;

위와 같이 unknown 타입으로 선언한 변수 unknownVar는 string 타입의 값도, number 타입의 값도 모두 할당 가능하다. 이는 any 타입과 같은 특징이다.

// num = unknownVar;
// unknownVar.toUpperCase();

하지만 같은 타입의 값을 담고 있다 할지라도 다른 변수에 할당이 불가능하며, 내장함수를 사용하는 것도 불가능하다.

이 때 unknown 타입을 활용할 수 있는 방법으로는 "타입 정제"가 있다.

if (typeof unknownVar === "number") {
  num == unknownVar;
}

본래 unknown 타입은 연산이 불가능하지만, 이 경우에는 타입을 정제했기 때문에 연산이 가능하다.

💡 결론

any 는 아예 타입을 검사하지 않기 때문에, 사용 시 안전성이 떨어진다는 특징이 있다.
타입을 결정하기 어려운 변수에 대해서 any 타입보다는 unknown 타입을 사용하자.

Reference

👩🏻‍🏫 한입 크기로 잘라 먹는 타입스크립트(TypeScript)
https://www.inflearn.com/course/한입-크기-타입스크립트

profile
꾸준하고 성실하게, FE 개발자 역량을 키워보자 !

0개의 댓글