오늘은 "한입 크기로 잘라 먹는 타입스크립트"의 섹션3,
타입스크립트의 기본 타입들을 복습하며 그 중 any
와 unknown
의 차이에 대해 구체적으로 알아보았다.
- 특정 변수의 타입을 확실히 모를 때 사용.
- 어떤 값이든 할당 가능. 메서드도 제약 없이 사용 가능.
😵 문제점
- 타입 검사를 런타임에 실행하기 때문에, 오류 또한 런타임에 확인 가능.
let anyVar: any = 10;
anyVar = "hello";
anyVar = true;
위와 같이 any
타입으로 선언한 변수 anyVar는 number 타입의 값도, string 타입의 값도, boolean 타입의 값도 모두 할당 가능하다.
let num: number = 10;
num = anyVar;
또한 어떤 타입의 변수에든 any
타입 변수의 값을 할당 가능하다.
- 어떤 타입의 값이든 할당 가능. ➡️ 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
타입을 사용하자.