알려지지 않은 타입
이다.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
를 쓴다면 타입스크립트를 사용하는 이유가 없다. (any
타입은 타입스크립트가 제공하는 여러 장점들을 무력화시키기 때문에.)
이럴 때 any
보다 깐깐한(?) unknown
타입을 사용하는 것이 좋다. (타입 선언 이후 조건문 등으로 타입 체크 코드 작성하면 unknown 타입을 잘 사용할 수 있다!)