ReviseAlgo Logo

Error Handling & Patterns

Exhaustive Checking with never

Enforce complete switch case coverage across union variants using the never type.

Last Updated: July 29, 2026 10 min read

Exhaustive type checking uses the never type to ensure every possible member of a discriminated union is handled inside switch or if statements.

1. Introduction & Architecture

2. Deep Dive & Core Concepts

If all union cases are handled, the variable in the default case is narrowed to type never. If a new union member is added later without updating the switch statement, TypeScript reports a compile error at the assertNever call site.

3. Basic Code Example

4. Advanced Production Patterns

5. Interactive Code Playground

type Status = "idle" | "loading" | "success";

function render(status: Status) { switch (status) { case "idle": return "Idle"; case "loading": return "Loading"; case "success": return "Success"; default: const _exhaustive: never = status; return _exhaustive; } } console.log(render("idle"));

6. Common Pitfalls & Edge Cases

Note: Always place an assertNever function or const _check: never = val in default cases of state reducers to make future refactoring type-safe.

7. Interview Q&A & Quizzes

Q: How does exhaustive type checking work in TypeScript?

A: By assigning the unhandled conditional variable to a never typed variable in the fallback branch, triggering a build error if any union member remains unhandled.

8. Summary Comparison Table

Union StateVariable Type in DefaultResult
All Variants HandledneverCompiles Cleanly
| Unhandled Variant | UnhandledType | Compile Error |