Паттерн Assert Exhaustiveness в TypeScript: заставляем TS искать баги… — xycu2.rar — TG.ME

Паттерн Assert Exhaustiveness в TypeScript: заставляем TS искать баги за нас

Представь: у тебя есть union-тип статусов заказа или валют, и ты обрабатываешь их через if или switch. Что произойдет, если через полгода в проект добавят новый статус, а ты забудешь добавить его обработку в функцию? Код тихо вернет undefined и сломает интерфейс.

Чтобы этого избежать, используется паттерн Assert Exhaustiveness:
type Currency = 'RUB' | 'USD' | 'EUR' // Добавили EUR

// Вспомогательная функция для проверки исчерпываемости
// "value: never" работает в редакторе , и подсвечивает ошибку, если не обработали вариант
function assertExhaustiveness(value: never): never {
// Работает на сервере
throw new Error(`Необработанный вариант: ${JSON.stringify(value)}`);
}

function getCurrencyChar(currency: Currency) {
if (currency === 'RUB') return '₽';
if (currency === 'USD') return '$';


// ТУТ TS ВЫДАСТ ОШИБКУ КОМПИЛЯЦИИ:
// Argument of type 'string' (EUR) is not assignable to parameter of type 'never'.
// TS буквально заставляет тебя написать еще один if для 'EUR'!

// Если все варианты обработаны, сюды доходит только 'never'
return assertExhaustiveness(currency)
}
❤1
September 6, 2026 29