diff options
Diffstat (limited to 'utils/assert/assert-never.ts')
| -rw-r--r-- | utils/assert/assert-never.ts | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/utils/assert/assert-never.ts b/utils/assert/assert-never.ts new file mode 100644 index 0000000..406eca9 --- /dev/null +++ b/utils/assert/assert-never.ts @@ -0,0 +1,16 @@ +/** + * Mark a branch as unreachable in an exhaustive switch. If the compiler + * ever allows this line to be reached, `value` stops being `never` and + * the call site fails to type-check — making exhaustive checks load-bearing + * at compile time. + * + * Usage: + * switch (kind) { + * case 'a': ... + * case 'b': ... + * default: assertNever(kind) + * } + */ +export function assertNever(value: never, message?: string): never { + throw new Error(message ?? `Unhandled case: ${String(value)}`) +} |
