이전에 기술면접 볼 때 질문으로 나왔었는데 제대로 대답하지 못했었당..🥺...까먹지 않으려고 기록해본다.
unknown
은 타입스크립트의 Top-Type 이다. let foo: unknown = 'bar';
foo = 10; // ok
foo = ['hello', 'world']; // ok
// 공통된 연산 외에는 할 수 없다.
foo[0]; // Error
foo(); // Error
foo.bar // Error
// 타입이 지정된 변수에 할당 할 수 없다.
let bar: boolean = foo; // Error !!
// foo 변수의 타입이 unknown 이기 때문에 boolean 타입의 변수에 할당 할 수 없다.
// 할당하기 위해서는 아래와 같이 타입을 명시해줘야 한다.
let bar: boolean = (foo as boolean);
Any
는 타입 검사를 항상 만족한다.let foo: any = 'bar';
foo.bar // 컴파일러가 뭐가 잘못된지 모른다.
foo() // 컴파일러가 뭐가 잘못된지 모른다.
let foo : never = 'bar'; // Error
let bar : never = 10; // Error
1. 함수가 아무것도 반환하지 않을 때 -> never 를 반환타입으로 지정하여 타입추론 예외를 제거한다.
function throwError(errorMsg: string): never {
throw new Error(errorMsg);
}
2. 특정 타입 값을 할당받지 못하게 할 때
type NonString<T> = T extends string ? never : T;