본문 바로가기
컴퓨터 언어/TypeScript

[TypeScript] any와 unknown의 차이

by 테크케찰 2021. 8. 18.

TypeScript로 개발을 하면서 타입을 지정하기 애매한 경우에 저는 주로 any를 이용해서 타입을 지정해주었습니다.

최근에 unknown에 대해서도 알게 되었고, 둘의 차이점에 대한 글을 써보려 합니다.

 

unknown 역시 any처럼 타입을 지정하기 애매할 때 사용한다고 합니다.

하지만 아래의 경우에서 any와 차이점을 보이는데요, 

 

1) 할당

let typeUnknown: unknown;

let typeAny:any;
let typeAny2: any=typeUnknown;

let typeString:string=typeUnknown; // 'unknown' is not assignable to type 'string'.
let typeString2:string=typeAny; 

let typeObject:object=typeUnknown; // Type 'unknown' is not assignable to type 'object'.
let typeObject2:object=typeAny;

any의 경우 다른 타입을 가진 값에 할당이 자유롭지만, unknown의 경우 다른 타입의 값에 할당을 할 수 없고 에러가 발생합니다. (any 타입에 할당하는 경우 제외)

 

2) property

let variable: unknown

variable.foo.bar // Error: Object is of type 'unknown'.(2571)
variable[0] // Error
variable.trigger() // Error
variable() // Error
new variable() // Error

위 코드는 아래 링크에서 퍼온 코드입니다.

https://jbee.io/typescript/TS-9-unknown/

 

[TS] 9. unknown Type

TypeScript 3.0 version부터 이라는 새로운 타입이 추가됐다. any vs unknown 타입이 도입된 배경을 보다 잘 이해하기 위해 타입을 살펴봐야 한다. TypeScript에서 는 모든 타입을 할당받을 수 있는 타입이다.

jbee.io

보시면 unknown 타입은 프로퍼티에 접근할 수 없고, 메서드를 호출할 수 없으며 인스턴스를 생성할 수 없다고 합니다.