/**
 * Error class for exhaustive type checking in switch statements and
 * conditionals.
 *
 * Ensures at compile-time that all possible cases of a union type are handled.
 * When TypeScript's type system proves all cases are covered, the variable in
 * the default case has type `never`, making this error theoretically
 * unreachable in correctly typed code.
 *
 * This pattern is crucial for maintaining type safety when adding new options
 * to existing types - TypeScript will error if a new case isn't handled.
 *
 * @example
 *
 * ```ts
 * // Exhaustive handling of sorting types
 * function getSortingAlgorithm(
 *   type: 'alphabetical' | 'natural' | 'custom',
 * ) {
 *   switch (type) {
 *     case 'alphabetical':
 *       return alphabeticalSort
 *     case 'natural':
 *       return naturalSort
 *     case 'custom':
 *       return customSort
 *     default:
 *       throw new UnreachableCaseError(type)
 *     // TypeScript ensures 'type' is 'never' here
 *   }
 * }
 * ```
 */
export declare class UnreachableCaseError extends Error {
  /**
   * Creates an error indicating that an supposedly unreachable case was
   * reached.
   *
   * @param value - The value that should have type `never` if all cases are
   *   handled. In practice, this will contain the unhandled case value.
   */
  constructor(value: never)
}
