ex)
let a: any;
a = 123; // a에 숫자 할당
let str: string = a; // string = any 이므로 에러 발생하지 않음.
a = {}; //na에 object 할당
const b = a-1 // 에러 발생하지 않음
let a: unknown;
a = 123;
let str: string = a; // 🚨Error. 타입이 지정된 변수에 할당 못함
const b = a-1; // 🚨Error. - 는 number에 대한 연산이므로 안됨.
// 할당하기 위해서는 아래와 같이 타입을 명시필요.
let str2: string = (a as string);
any와 unknown 차이🤔?
any는 의도치 않은 사이드 이펙트 발생할 수 있으나 unknown은 최소의 공통적인 연산만 가능하므로 any 보다 unknown이 좀더 안전한 편
//1. 함수 반환값 never로 사용하는 경우 : 타입 추론 예외 제거
function throwError(errorMsg: string): never {
throw new Error(errorMsg);
}
//2. 특정 타입 값을 할당 받지 못하게 할때 : T가 string이면 never를 반환해서 NonString 타입을 사용하는 변수에 string타입이 올 경우 문제를 발생시킴
type NonString<T> = T extends string ? never : T;
const a: NonString<number> = 1 //ok
const b: NonString<boolean> = true // ok
const c: NonString<string> = '1' //🚨Error.
[타입스크립트] any, unknown 그리고 never 의 차이점
TypeScript의 unknown, any 그리고 never