본문 바로가기

[TypeScript] any vs unknown

by mugglim 2022. 6. 1.

TL;DR

  • any는 모든 타입에 할당될 수 있으며, unknown은 unknown, any 타입에만 할당될 수 있다.
  • any는 속성에 접근이 가능하며, unknown은 불가하다.
  • any, unknown 모두 다른 타입과 연산을 허용하며, unknown은 비교 연산, 논리 연산, typeof, instanceof 연산만 허용한다.
  • unknown은 추론된 타입이 아닌, 개발자가 직접 명시한 타입이다. (타입 시스템이 추론하지 못한 값은 any가 최대)

1. 할당 관점

let anyVal: any;
let unknownVal: unknown;

let numVal: number;
let strVal: string;

numVal = anyVal;
numVal = unknownVal; // Error: Type 'unknown' is not assignable to type 'number'.

strVal = anyVal;
strVal = unknownVal; // Error: Type 'unknown' is not assignable to type 'number'.

2. 속성 접근 관점

let anyAnimal: any;
let unknownAnimal: unknown;

anyAnimal.sleep();
anyAnimal.bark();

unknownAnimal.sleep(); // Error: Object is of type 'unknown'.
unknownAnimal.bark(); // Error: Object is of type 'unknown'.

3. 연산 관점

let anyX: any;
let anyY: any;

let unknownX: unknown;
let unknownY: unknown;

console.log(anyX + anyY);
console.log(anyX * 10);

console.log(anyX + unknownX); // Not Error !!
console.log(unknownX * 10); // Error: Object is of type 'unknown'.ts(2571)
console.log(unknownX + unknownY); // Error: Object is of type 'unknown'.ts(2571)

Ref

댓글