타입 계층도와 함께 기본타입 살펴보기

woodstock·2023년 12월 9일
0
post-thumbnail

타입 계층도


기본타입

unknown 타입 (전체 집합)

unknown타입은 타입 계층도의 최상단에 위치한다.

따라서 unknown타입 변수에는 모든 타입의 값을 할당할 수 있다.
즉, 모든 타입은 unknown타입으로 업 캐스트 할 수 있는 것이다.

function unknownExam() {
  let a: unknown = 1;
  let b: unknown = "hello";
  let c: unknown = true;
  let d: unknown = null;
  let e: unknown = undefined;
}

반면에 다른 타입이 unknown타입으로 다운 캐스트하는 것은 불가능하다.


never 타입 (공집합 타입)

never타입은 타입 계층도에서 가장 아래에 위치하며, 공집합을 뜻하는 타입이다.

공집합은 모든 집합의 부분집합이다.
그러므로 never타입은 모든 타입의 서브 타입이라고 할 수 있다.
따라서 never타입은 모든 타입으로 업캐스팅 할 수 있다.

function neverExam() {
  function neverFunc(): never {
    while (true) {}
  }

  let num: number = neverFunc();
  let str: string = neverFunc();
  let bool: boolean = neverFunc();
}

반면 그 어떤 타입도 never타입으로 다운 캐스팅 할 수는 없다.


void 타입

void타입은 undefined타입의 슈퍼타입이다.

따라서, 반환값을 void로 선언한 함수에서 undefined를 반환해도 오류가 발생하지 않는다.

function voidExam() {
  function voidFunc(): void {
    console.log("hi");
    return undefined;
  }

  let voidVar: void = undefined;
}

any 타입

any타입은 사실상 타입 계층도를 완전히 무시한다.

모든 타입의 슈퍼타입이 될 수도 있고, 모든 타입의 서브타입이 될 수도 있다.

function anyExam() {
  let unknownVar: unknown;
  let anyVar: any;
  let undefinedVar: undefined;

  // unknown타입이 any타입으로 다운캐스트 가능
  anyVar = unknownVar;
  // any타입이 undefined로 다운캐스트 가능 
  undefinedVar = anyVar;
}

그러나 any타입이 never타입으로 다운캐스트하는 것은 불가능하다.

never타입은 정말 순수한 공집합이기 때문에 그 어떤 타입도 다운캐스팅 할 수 없기 때문이다.
never타입에서만큼은 any타입에게도 예외는 없다.

타입호환표

profile
해내는 사람

0개의 댓글