이번에는 "any타입"과 "unknown타입"에 대한 이야기를 해보겠다.
any 타입
단어에 힌트가 있다. 말 그대로 "모든 타입"을 자유롭게 사용할 수 있게 만드는 만능 타입이다.
코드를 살펴보자.
let anyVar: any = 10;
anyVar = "hello";
anyVar = true;
anyVar = {};
anyVar.toUpperCase();
anyVar.toFixed();
anyVar.a;
만일 타입을 any로 선언하지 않고 number로 선언했다면 오류가 떴을 것이다. any로 선언하기에 문제가 생기지 않는다.
any는 최대한 쓰지 말자.
위 코드를 ts-node로 실행하면 런타임 오류가 발생한다.
any 타입은 타입 검사를 받지 않는 타입이다. 문법과 규칙에서 자유롭지만 그만큼 위험하다.
애초에 이런 식으로 많이 사용하면 타입스크립트를 쓸 이유가 없다. 그러니 웬만하면 안 쓰는 것을 추천한다.
unknown 타입
unknown 타입은 any 타입과 비슷하지만 좀 더 안전한 타입이다.
코드를 확인해보면..
let unknownVar: unknown;
unknownVar = "";
unknownVar = 1;
unknownVar = () => {};
위와 같이 어떤 타입의 값이던 할당이 가능하다.
그러나 반대로는 불가능하다.
unknown 타입의 값은 어떤 타입의 변수에도 저장할 수 없다.
let num: number = 10;
(...)
let unknownVar: unknown;
unknownVar = "";
unknownVar = 1;
unknownVar = () => {};
num = unknownVar; // 오류 !
또, unknown 타입의 값은 어떤 연산에도 참여할 수 없으며, 어떤 메서드도 사용 불가능하다.
let unknownVar: unknown;
(...)
unknownVar * 2 // 오류!
만일 위와 같이 unknown 타입의 값을 number 타입의 값처럼 취급하고 곱셈 연산을 수행하고 싶다면 조건문을 이용해서 값이 number 타입의 값이라는 것을 보장해 주면 된다.
코드 >
if (typeof unknownVar === "number") {
// 이 조건이 참이된다면 unknownVar는 number 타입으로 볼 수 있음
unknownVar * 2;
}
참고로 타입스크립트에서는 위 코드처럼 조건문을 이용해 특정 값이 특정 타입임을 보장할 수 있게 되면 해당 값의 타입이 자동으로 바뀐다.
이를 타입 정제라고 부른다. (나중에 배울 것임)
'FE > TypeScript' 카테고리의 다른 글
타입스크립트에서 타입은 집합이다. (1) | 2025.04.28 |
---|---|
타입스크립트의 void와 never 타입 (0) | 2025.04.25 |
타입스크립트의 enum 타입 (4) | 2025.04.17 |
타입스크립트의 타입 별칭과 인덱스 시그니처 (1) | 2025.04.15 |
타입스크립트의 객체를 다루는 방식 (1) | 2025.04.10 |