무한루프 (이러지 말자)

function go(): never {
  while (1) {}
}

function say() {
  throw new Error("error");
}

절대로 일어나서는 안되는걸 명시해준다.

type Animal = "cat" | "dog" | "bird";
let a: Animal = "cat";
a = "dog";
a = "bird";
a = "hores"; // 에러

// Animal 에 타입으로 정의한 것 외에는 값이 절대 존재하면 안됨
// 위의 문장을 어노테이션으로 타입을 표현 해보자.

function say(who: Animal): string {
  if (who === "cat") {
    return "고양이";
  }
  if (who === "dog") {
    return "멍머이";
  }
  if (who === "bird") {
    return "새";
  } else {
    // why come in here the code?
    const no: never = who;
    throw new Error(`no type: ${no}`);
  }
}

say("horse"); // 오류가 있어도 js 는 만들어 짐