컴퓨터 언어/TypeScript

[TypeScript] any와 unknown의 차이

테크케찰 2021. 8. 18. 00:28

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 타입은 프로퍼티에 접근할 수 없고, 메서드를 호출할 수 없으며 인스턴스를 생성할 수 없다고 합니다.