TypeScript 3.0
부터 새로 추가된 타입
문자 그대로 알려지지 않은 타입
이다.
unknown 타입으로 선언된 변수의 값으로는 모든 타입이 올 수 있다. (any타입과 비슷)
그렇다면 unknown 과 any 의 차이점
은 무엇일까?
unknown에는 메서드를 호출할 수 없다.
어떤 타입인지 확실하지 않기 때문에 타입스크립트는 어떠한 연산이든 실행하지 않는다.
let userInput: unknown;
console.log(userInput.length); // ❌ 에러
unknown 타입을 가진 변수는 any를 제외하고 다른 타입을 가진 변수에 할당할 수 없다.
다시 말해, 고정된 타입을 가지고 있는 변수에 unknown 타입을 가진 변수를 할당할 수 없다.
let userInput: unknown;
let userName: string;
userInput = 5; // ⭕️ 작동
userInput = 'Harry'; // ⭕️ 작동
userName = userInput; // ❌ 에러
unknown 타입을 가진 변수를 다른 변수에 할당하기 위해서는 타입 체크를 해주면 된다.
let userInput: unknown;
let userName: string;
userInput = 5;
userInput = 'Harry';
if (typeof userInput === 'string') {
userName = userInput; // ⭕️ 작동
}
변수의 값으로 어떤 타입이 올지 미정인 상태에서 any를 쓴다면 타입스크립트를 사용하는 이유가 없다.(typescipt: 그럴거면 js로 돌아가.)
이럴 때 any 보다 깐깐한(?) unknown 타입을 사용하는 것이 좋다. (타입 선언 이후 조건문 등으로 타입 체크 코드 작성하면 unknown 타입을 잘 사용할 수 있다!)