any와 unknown의 차이 ( + never)



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;




참조

any와 unknown의 차이

never에 대해서

Mar 28, 2024 Views 98