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
댓글