Let’s say you have a switch statement that handles all values of an enum (or some other type with a limited number of possible values). When you extend that enum sometime in the future you may forget to add a new case to the statement.

With TypeScript you can use an assertUnreachable() function to ensure that all possible cases are handled:

TypeScript
function myFunction(value: SomeEnum) {
  switch (value) {
    case SomeEnum.ONE:
      // ...
      break;

    case SomeEnum.TWO:
      // ...
      break;

    default:
      // Ensures that all cases are handled
      assertUnreachable(value);
  }
}

The assertUnreachable() function works by defining an argument of type never:

TypeScript
function assertUnreachable(_value: never): never {
  throw new Error("Statement should be unreachable");
}

When you now extend the enum TypeScript will show an error:

TypeScript Error for unhandled cases