: 특정 변수의 타입을 우리가 확실히 모를 때 사용하는 타입
아래 코드처럼 typescript는 점진적으로 타입을 추론하여 사용하기 때문에 처음 추론한 type과 다른 type을 할당하면 오류가 발생한다.

하지만 언젠가 type 상관 없이 변수를 변화시킬 수 있어야 할 때,
아래 코드처럼 type을 any로 설정해주면 된다.

any를 사용하면 아래 코드처럼 number, string, boolean, 함수 모두 제약 없이 사용할 수 있고, (ts 상에 오류 발생 X)

아래 코드처럼 모든 타입의 변수에 any 타입의 값을 넣을 수도 있다. (ts 상에 오류 발생 X)

따라서 any 타입은 변수에 지정할 경우, 모든 타입의 값을 할당 받을 수 있고, 모든 타입의 변수에 any 타입의 값을 넣을 수도 있다.
다만, 위 코드와 같이 오류가 있더라도 오류가 발생하지 않고 런타임에서 오류가 발생하기 때문에 문제가 발생한다.
let anyVar: any = 10;
anyVar = "hello";
anyVar = true;
anyVar = {};
anyVar = () => {};
anyVar.toUpperCase();
anyVar.toFixed();
let num: number = 10;
num = anyVar;
위 코드는 에러가 발생하지 않았었지만,
실행시키면, 아래와 같이 런타임에 오류가 발생한다.

: any 타입과 비슷하지만 좀 더 제약적이다.


문자, 숫자, 함수 등 any 타입에 변수를 선언한 것과 마찬가지로 아무 타입의 값이나 다 넣을 수 있다. (any와 동일)
but, 모든 타입의 변수에 unknown 타입의 값을 집어넣을 수 없다. (any와 차이)
toUpperCase 같은 메소드, 덧셈, 곱셈, 뺄셈, 나눗셈 등 어떤 연산도 불가능 (any와 차이)
다만, 아래 코드처럼 unknown 타입의 변수를 다른 타입으로 정제해서는 사용할 수 있다. (타입 정제)

런타임 에러를 일으키는 any 타입보다는 unknown 타입 사용을 생활화 하자!