← Назад ко всем вопросам

Для чего нужен тип Never

1️⃣ Как кратко ответить

Тип never в TypeScript используется для обозначения значений, которые никогда не встречаются. Он применяется в функциях, которые никогда не возвращают значение, например, выбрасывают исключение или зацикливаются. Это помогает TypeScript выявлять ошибки в коде и улучшать его безопасность.

2️⃣ Подробное объяснение темы

Тип never в TypeScript — это специальный тип, который представляет значения, которые никогда не встречаются. Он используется в ситуациях, когда функция или выражение не может завершиться успешно и не возвращает никакого значения. Это может быть полезно для улучшения безопасности и надежности кода.

Применение типа never

  1. Функции, которые выбрасывают исключения

    Когда функция всегда выбрасывает исключение и никогда не возвращает значение, она может быть определена с типом never. Это позволяет TypeScript понять, что функция не завершится успешно.

    function throwError(message: string): never {
        throw new Error(message); // Функция выбрасывает исключение и не возвращает значение
    }
    

    В этом примере функция throwError принимает строку и выбрасывает исключение. Поскольку она никогда не возвращает значение, ее возвращаемый тип — never.

  2. Функции, которые зацикливаются

    Если функция зацикливается и никогда не завершает выполнение, она также может быть определена с типом never.

    function infiniteLoop(): never {
        while (true) {
            // Бесконечный цикл, функция никогда не завершится
        }
    }
    

    Здесь функция infiniteLoop содержит бесконечный цикл, поэтому она никогда не завершится и не вернет значение. Ее возвращаемый тип — never.

  3. Исчерпывающие проверки типов

    Тип never также полезен в исчерпывающих проверках типов, например, в конструкциях switch, чтобы гарантировать, что все возможные варианты обработаны.

    type Shape = 'circle' | 'square';
    ​
    function getArea(shape: Shape): number {
        switch (shape) {
            case 'circle':
                return Math.PI * 1 * 1; // Площадь круга с радиусом 1
            case 'square':
                return 1 * 1; // Площадь квадрата со стороной 1
            default:
                const _exhaustiveCheck: never = shape; // Проверка на исчерпывающий список вариантов
                throw new Error(`Unhandled shape: ${shape}`);
        }
    }
    

    В этом примере default ветка никогда не должна быть достигнута, если все возможные значения Shape обработаны. Если shape имеет тип, отличный от circle или square, TypeScript выдаст ошибку, так как _exhaustiveCheck не может быть never.

Зачем нужен тип never

Тип never помогает разработчикам писать более безопасный и надежный код. Он позволяет TypeScript выявлять ситуации, когда функция не может завершиться успешно, и помогает избежать ошибок, связанных с необработанными случаями. Это особенно полезно в больших кодовых базах, где важно гарантировать, что все возможные варианты обработаны и что функции ведут себя предсказуемо.

Тема: TypeScript
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки