Typescript

JavaScript with types

2023-01-27

Notes

Exhaustive Type Checking

Consider an enum:

enum Color {
  Red,
  Blue,
  Green,
}

that has a switch case:

function whichColor(c: Color): string {
  switch (c) {
    case Color.Red:
      return "Red";
    case Color.Blue:
      return "Blue";
    default:
      return "Unknown color";
  }
}

but we missed Color.Green and yet no compiler errors!

A simple solution (Typescript 4.9+):

function whichColor(c: Color): string {
  switch (c) {
    case Color.Red:
      return "Red";
    case Color.Blue:
      return "Blue";
    default:
      c satisfies never;
      return "Unknown color";
  }
}

Which leads to:

Type ‘Color.Green’ does not satisfy the expected type ‘never’.