본문 바로가기
FE/TypeScript

타입스크립트의 Any타입 / Unknown타입

by 코딩의 세계 2025. 4. 19.

타입스크립트

이번에는 "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;
}

참고로 타입스크립트에서는 위 코드처럼 조건문을 이용해 특정 값이 특정 타입임을 보장할 수 있게 되면 해당 값의 타입이 자동으로 바뀐다. 

이를 타입 정제라고 부른다. (나중에 배울 것임)