Вопрос проверяет понимание системы типов TypeScript и случаев, когда тип never выводится автоматически.
Тип never представляет значения, которые никогда не могут произойти. Он является нижним типом в иерархии типов TypeScript, то есть может быть присвоен любому типу, но самому never нельзя присвоить ничего, кроме самого never. TypeScript выводит never автоматически в нескольких ключевых ситуациях.
never.never.never[], он не может содержать элементы.// Функция, выбрасывающая исключение
function throwError(message: string): never {
throw new Error(message);
}
// Бесконечный цикл
function infiniteLoop(): never {
while (true) {}
}
// Exhaustive check с discriminated union
type Shape =
| { kind: 'circle'; radius: number }
| { kind: 'square'; side: number };
function area(shape: Shape): number {
switch (shape.kind) {
case 'circle':
return Math.PI * shape.radius ** 2;
case 'square':
return shape.side ** 2;
default:
// shape здесь имеет тип never
const _exhaustive: never = shape;
return _exhaustive;
}
}Тип never активно используется для обеспечения типобезопасности при работе с объединениями типов. Он помогает разработчику не пропустить обработку нового варианта при расширении типа. Также never применяется в условных типах для фильтрации или исключения определённых типов из объединения.
Понимание never необходимо для написания надёжного TypeScript-кода, особенно при работе с сложными типами и discriminated unions. Это мощный инструмент для статического анализа, который помогает избежать ошибок на этапе компиляции.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию