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 619

    Комментарии

    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 ₽
    Подробнее

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

    Картинка поста PostgreSQL для начинающих: создаём базу и пишем первые запросы
    Иконка аватараАнтон
    Иконка календаря20 мая 2026
    PostgreSQLSQLБазы данныхjuniorИконка уровня junior

    PostgreSQL для начинающих: создаём базу и пишем первые запросы

    PostgreSQL для начинающих: пошаговое руководство по созданию базы данных, таблиц и написанию первых SQL-запросов с примерами.

    Иконка чипа0
    Иконка глаза42
    Иконка комментариев0
    Картинка поста Асинхронный JavaScript: callbacks, Promise, async/await по порядку
    Иконка аватараАнтон
    Иконка календаря19 мая 2026
    JavaScriptАсинхронностьPromise+ 1juniorИконка уровня junior

    Асинхронный JavaScript: callbacks, Promise, async/await по порядку

    Асинхронный JavaScript: разбираем callbacks, Promise и async/await по порядку. Эволюция подходов, примеры кода и частые ошибки начинающих.

    Иконка чипа0
    Иконка глаза63
    Иконка комментариев0
    Картинка поста Vue 3 с нуля: создаём первое приложение за час
    Иконка аватараАнтон
    Иконка календаря18 мая 2026
    VueJavaScriptFrontendjuniorИконка уровня junior

    Vue 3 с нуля: создаём первое приложение за час

    Vue 3 с нуля: пошаговое руководство для начинающих. Создаём первое реактивное приложение на Composition API за один час практики.

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