any보다는 unknown을 사용하는것이 좋다
any
모든 타입 허용
컴파일러 경고 내지 않음
// 아래의 any 예제는 컴파일러 경고를 표시하지않는다
// 잠재적인 에러를 유발할수있다
let value : any = 10;
console.log(value.length); // undefined
unknown
모든 타입 허용
프로퍼티 연산을 사용하는 경우 컴파일러 경고
일단은 모든 타입을 받지만 사용시에는 엄격히 검사하라는 의미
// 아래의 unknown 예제는 컴파일러 경고를 표시한다
// 잠재적인 에러를 줄일수있다
let value : any = 10;
console.log(value.length); // Ojbect is of type 'unknown'
// 아래와 같이 타입가드를 사용하여 unknown을 사용할수있다
let valueStr: unknown = "unknown";
if (typeof valueStr === "string") {
console.log(valueStr.length);
}
never
어떤 값도 할당할수없다는 의미로 사용
null , undefined를 포함해서 어떤 값도 올수없음
throw Error()등 아무것도 return하지 않는 문장등에서 사용
예제1
let foo : never = 'bar'; // Error
예제 2
throw하기 때문에 아무것도 return 하지않는다. 그러므로 never
function throwError(errorMsg: string): never {
throw new Error(errorMsg); // Ok
}
예제3
특정값을 할당받지 못하게 할때
T가 문자열을 상속하는게 참이라면 never 그렇지 않다면 T
즉 T가 문자열 타입이면 받지않겠다는 의미
type NonString<T> = T extends string ? never : T;
참조
Mar 28, 2024
Views 98