Как работает исчерпывающая проверка (Exhaustiveness Checking) в TypeScript?
СобеседованиеСужение типовПаттерны типизации
- Если все члены union обработаны, остаток имеет тип
never
- Паттерн:
const _: never = value в default/else — ошибка компиляции при пропуске варианта
assertNever(value: never): never — функция-утверждение для проверки
- Работает в
switch и if/else цепочках
- При добавлении нового члена union — ошибка компиляции во всех необработанных местах
Record<Type, Handler> — маппинг как альтернатива switch