반응형
unknown
We may need to describe the type of variables that we do not know when we are writing an application.
응용 프로그램을 작성할 때 모르는 변수의 타입을 묘사해야 할 수도 있습니다.
These values may come from dynamic content - e.g from the user - or we may want to intentionally accept all values in our API.
이러한 값은 동적 콘텐츠(예: 사용자로부터, 또는 우리 API의 모든 값을 의도적으로 수락하기를 원할 수 있습니다.)
In these cases, we want to provide a type that tells the compiler and future readers that this variable could be anything, so we give it the unknown types.
이 경우, 컴파일러와 미래의 코드를 읽는 사람에게 이 변수가 무엇이든 될 수 있음을 알려주는 타입을 제공하기를 원하므로 unknown 타입을 제공합니다.
unknown은 any처럼 모든 값을 대표하지만, unknown 의 타입을 검사해 정제(refine)하기 전까진 TypeScript가 unknown 타입의 값을 사용할 수 없게 강제합니다.
또한 unknown은 비교 연산(==, ===, ||, &&, ?)과 반전(!)을 지원하고, 다른 타입들과 마찬가지로 JavaScript의 typeof, instanceof 연산자로 정제할 수 있습니다.
let a: unknown = 20; // unknown
let b = a === 1234; // boolean
let c = a + 24; // error TS2571: 객체 타입이 'unknown'임
if(typeof a === 'number'){
let d = a + 10 // number
}
위의 예제를 통해 unknown 사용법을 대략적으로 파악할 수 있습니다.
- TypeScript가 무언가의 타입을 unknown이라고 추론하는 상황은 없습니다. unknown 타입을 사용하고자 한다면 개발자가 명시적으로 설정해야 합니다.(a)
- unknown 타입이 아닌 값과 unknown 타입인 값을 비교할 수 있습니다.(b)
- 하지만 unknown 값이 특정 타입이라고 가정하고 해당 타입에서 지원하는 동작을 수행할 수 없습니다.(c)
- 3 번의 동작을 수행하기 위해선 먼저 TypeScript에게 해당 값이 특정 타입임을 증명해야 합니다.(d)
정리
unknown은 TypeScript 3.0 버전부터 지원합니다.
any와 짝으로 any 보단 Type-safe한 타입이며, any와 같이 아무거나 할당할 수 있지만, 컴파일러가 타입을 추론할 수 있게 끔 타입의 유형을 좁히거나 타입을 확정해주지 않으면 다른 곳에 할당할 수 없고, 사용할 수 없습니다.
unknown 타입을 사용하면 runtime error를 상당히 줄일 수 있고, 사용 전에 데이터의 일부 유형의 검사를 수행해야 함을 알리는 API에 사용할 수 있습니다.
반응형