PurpleSchool — курсы программирования онлайн
  • Бесплатно
    • Курсы
    • JavaScript Основы разработкиPython Основы PythonCSS CSS FlexboxКарта развития
    • База знанийИконка стрелки
    • Новостные рассылкиИконка стрелки
  • Пути
    • Frontend React разработчик
    • Frontend Vue разработчик
    • Backend разработчик Node.js
    • Fullstack разработчик React / Node.js
    • Mobile разработчик React Native
    • Backend разработчик Golang
    • Devops инженер
    • Backend разработчик Python
  • AI для кодаНовое
  • О нас
    • Отзывы
    • Реферальная программа
    • О компании
    • Контакты
  • Иконка открытия меню
    • Сообщество
    • PurpleПлюс
    • AI тренажёр
    • Проекты
PurpleSchool — платформа бесплатных roadmap и курсов для разработчиков
ютуб иконка
Telegram иконка
VK иконка
VK иконка
Курсы
ГлавнаяКаталог курсовFrontendBackendFullstack
Практика
КарьераПроектыPurpleПлюс
Материалы
БлогБаза знаний
Документы
Договор офертаПолитика конфиденциальностиПроверка сертификатаМиграция курсовРеферальная программа
Реквизиты
ИП Ларичев Антон АндреевичИНН 773373765379contact@purpleschool.ru

PurpleSchool © 2020 -2026 Все права защищены

  • Курсы
    • FrontendИконка стрелки
    • AI разработкаИконка стрелки
    • BackendИконка стрелки
    • DevOpsИконка стрелки
    • MobileИконка стрелки
    • ТестированиеИконка стрелки
    • Soft-skillsИконка стрелки
    • ДизайнИконка стрелки
    Иконка слояПерейти в каталог курсов
  • PurpleSchool — курсы программирования онлайн
    • AI для кодаНовое
    • Сообщество
    • PurpleПлюс
    • AI тренажёр
    • Проекты
    Главная
    Сообщество
    Тип never в Typescript

    Тип never в Typescript

    Аватар автора Тип never в Typescript

    Антон Ларичев

    Иконка календаря30 сентября 2022

    Типизация - это то, почему многие выбирают писать на TypeScript, а не на чистом JavaScript. Хотя на конференциях можно услышать доклады "Почему вам не нужен TS", в больших проектах без него просто не обойтись. А если писать на нём регулярно, то уже даже в небольших проектах обычный JS будет приносить только боль. Я это ощутил, при подготовке уроков по NodeJS для следующего курса, где не используется TypeScript.

    Потому важно понимать все особенности типизации. Разберём тип never, который многим, кто знакомится с TypeScript непонятен.

    Не путать с void!

    Тип void в возвращаемом типе функции, обозначает что функция ничего не возвращает (или по иному говоря возвращает undefined).

    const a = (): void => {
        return undefined;
    }
    

    В свою очередь переменной типа never можно присвоить только тип never и никакой другой. Кажется бесполезным? Рассмотрим 3 примера использования:

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

    Вот пример функции, которая возвращает тип never:

    export const error = (message: string): never => {
        throw new Error(message);
    }
    

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

    export const typeRun = (x: string | number): boolean => {
        if (typeof x === 'string') {
            return true;
        } else if (typeof x === 'number') {
            return false;
        }
        return error("!");
    }
    

    Если бы не использовали never, TS бы выдавал ошибку, так как мы в теории могли бы попасть дальше проверки и вернуть undefined вместо boolean.

    Switch / case

    Рассмотрим следующий пример:

    export type Direction = 'up' | 'down';
    export const run = (direction: Direction) => {
        switch (direction) {
            case 'up':
                return 1;
            case 'down':
                return -1;
            default:
                const a: never = direction;
            }
    }
    

    Если у нас в Direction добавится новое направление, скажем right, то TypeScript за счёт типа подскажет, что у нас switch больше не валиден, так как при новом значении Direction мы уже можем попасть в default и у нас типу never будет присвоено значение другого типа, что недопустимо.

    Conditional types

    Благодаря never мы можем исключить не нужные типы. Например, сделаем тип, который если у нас передано значение с number мы присваиваем never. Тем самым мы оставляем только нужный тип в типе А:

    type NonNumber<T> = T extends number ? never : T;
    
    type A = NonNumber<string | number>; // A - всегда string
    
    Иконка глаза8 657

    Комментарии

    0

    Постройте личный план изучения Основы разработки до уровня Middle — бесплатно!

    Основы разработки — часть карты развития Frontend, Backend, Mobile

    • step100+ шагов развития
    • lessons30 бесплатных лекций
    • lessons300 бонусных рублей на счет

    Бесплатные лекции

    Лучшие курсы по теме

    изображение курса

    Основы Git

    Антон Ларичев
    AI-тренажерыAI-тренажеры
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.9
    3 999 ₽ 6 990 ₽
    Подробнее
    изображение курса

    HTML и CSS

    Антон Ларичев
    AI-тренажерыAI-тренажеры
    Практика в студииПрактика в студии
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.9
    3 999 ₽ 6 990 ₽
    Подробнее
    изображение курса

    Neovim

    Антон Ларичев
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.8
    3 999 ₽ 6 990 ₽
    Подробнее

    Похожие статьи

    Картинка поста Как написать резюме разработчика с нуля в 2025: полный гайд
    Иконка аватараАнтон
    Иконка календаря01 июня 2026
    карьерарезюмеsoft skillsjuniorИконка уровня junior

    Как написать резюме разработчика с нуля в 2025: полный гайд

    Как написать резюме разработчика с нуля в 2025: структура, примеры блоков опыта и проектов, типичные ошибки и советы для прохождения ATS-фильтров.

    Иконка чипа0
    Иконка глаза27
    Иконка комментариев0
    Картинка поста React Hooks: полный гайд по useState, useEffect, useCallback, useMemo
    Иконка аватараАнтон
    Иконка календаря31 мая 2026
    ReactJavaScriptHooks+ 1middleИконка уровня middle

    React Hooks: полный гайд по useState, useEffect, useCallback, useMemo

    Полный гайд по React Hooks: useState, useEffect, useCallback и useMemo. Разбираем синтаксис, примеры использования и типичные ошибки.

    Иконка чипа0
    Иконка глаза53
    Иконка комментариев0
    Картинка поста TypeScript дженерики на практике: полный гайд для разработчиков
    Иконка аватараАнтон
    Иконка календаря30 мая 2026
    typescriptgenericsjavascript+ 1middleИконка уровня middle

    TypeScript дженерики на практике: полный гайд для разработчиков

    TypeScript дженерики на практике: разбираем синтаксис, ограничения, условные типы и реальные примеры использования в проектах.

    Иконка чипа0
    Иконка глаза79
    Иконка комментариев0
    Иконка чипа0