Skip to main content
← Gists
typescript Feb 19, 2026

assertNever for Exhaustive Switches

Fail fast when a union gains a new member.

assertNever turns missing switch branches into compile errors and runtime failures.

Helper

assert-never.ts
function assertNever(value: never): never {
throw new Error('Unhandled case: ' + value)
}

type Event =
| { type: 'created'; id: string }
| { type: 'deleted'; id: string }

function handle(event: Event) {
switch (event.type) {
  case 'created':
    return event.id
  case 'deleted':
    return event.id
  default:
    return assertNever(event)
}
}