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