any

let value: any = "Hello";
value = 42;
value = true;

function logValue(val: any): void {
  console.log(val);
}

logValue(value); // true

unknown

let value: unknown = "Hello";
value = 42;
value = true;

function logValue(val: unknown): void {
  if (typeof val === "string") {
    console.log(val.toUpperCase()); // "HELLO"
  } else if (typeof val === "number") {
    console.log(val.toFixed(2)); // 42.00
  } else {
    console.log(val);
  }
}

logValue(value); // true

never

function error(message: string): never {
  throw new Error(message);
}

function infiniteLoop(): never {
  while (true) {}
}

function handleValue(val: string | number): string {
  if (typeof val === "string") {
    return val.toUpperCase();
  } else if (typeof val === "number") {
    return val.toFixed(2);
  }

  // 타입 검사기에게 handleValue가 모든 경우를 처리했다고 알리기 위해 never를 사용
  return error("Unexpected value: " + val);
}

void

function logMessage(message: string): void {
  console.log(message);
}

let unusable: void = undefined;