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
  • О нас
    • Отзывы
    • Реферальная программа
    • О компании
    • Контакты
  • Иконка открытия меню
    • Сообщество
    • PurpleПлюс
    • AI тренажёр
    • Проекты
PurpleSchool — платформа бесплатных roadmap и курсов для разработчиков
ютуб иконка
Telegram иконка
VK иконка
VK иконка
Курсы
ГлавнаяКаталог курсовFrontendBackendFullstack
Практика
КарьераПроектыPurpleПлюс
Материалы
БлогБаза знаний
Документы
Договор офертаПолитика конфиденциальностиПроверка сертификатаМиграция курсовРеферальная программа
Реквизиты
ИП Ларичев Антон АндреевичИНН 773373765379contact@purpleschool.ru

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

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

    Возврат undefined из функции

    Аватар автора Возврат undefined из функции

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

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

    Давайте рассмотрим пример следующей функции:

    async function getUser(id: number): Promise<User> {
        // получение пользователя из базы, 
        // если не находит, то возвращает undefined
        return db.query(/*...*/);
    }
    

    Если у вас не стоит strict режим или поставлена опция "strictNullChecks": false в tsconfig.json ошибки не будет.

    Чем это плохо? Мы не очевидно получаем поведение, где мы передаём id и ожидаем пользователя, а на самом деле можем получить undefined. В результате надо не забыть сделать соответствующую проверку. Давайте сделаем это очевиднее!

    Разберём отличия

    Прежде чем переходить к решению, давайте разберём, чем отливается null от undefined.

    • null - ключевое слово языка, которое отображается отсутствие того или иного объекта. Его мы не можем получить случайно, это значение умышленно поставлено.
    • undefined - обозначает отсутствие значение в принципе и его мы можем получить случайно.

    Мы можем получить undefined например:

    • Не задав переменную.
    • Обратившись к несуществующему свойству объекта.
    • Не передав аргумент в функцию.

    Исходя из этого, полагаться на то, что это значение осмысленное - плохо. Если мы явно хотим обозначить отсутствие значение следует использовать null. Как тогда меняется наша функция?

    Подход с null

    Давайте сделаем api нашей функции явным:

    async function getUser(id: number): Promise<User | null> {
        const user: User = db.query(/*...*/);
        if(!user) {
            return null;
        }
        return user;
    }
    

    Теперь мы явно обозначаем пользователю этой функции, что мы можем найти или не найти пользователя, обязуя его делать проверку на null явно в своём коде, убирая не очевидное поведение.

    Плохой подход с exception

    Есть ещё более плохой подход, где у нас функция при не нахождении пользователя кидает ошибку:

    async function getUser(id: number): Promise<User> {
        const user: User = db.query(/*...*/);
        if (!user) {
            throw new Error('Пользователь не найден');
        }
        return user;
    }
    

    Тут управление потоком исполнение становится не линейным и не очевидным и нужно не забыть всё обложить try / catch. Так точно делать не нужно, так как мы получаем вместо последовательного кода прыжки по обработчикам ошибок.

    Иконка глаза2 454

    Комментарии

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

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

    Картинка поста Redis на практике: кеширование, очереди и pub/sub для вашего бэкенда
    Иконка аватараАнтон
    Иконка календаря20 апреля 2026
    nodejsdockerapimiddleИконка уровня middle

    Redis на практике: кеширование, очереди и pub/sub для вашего бэкенда

    Redis на практике: разбираем кеширование с TTL и инвалидацией, очереди сообщений через BullMQ и pub/sub для уведомлений в реальном времени. Готовые примеры на Node.js и TypeScript.

    Иконка чипа0
    Иконка глаза61
    Иконка комментариев0
    Картинка поста PostgreSQL для разработчика: индексы, EXPLAIN и оптимизация запросов без DBA
    Иконка аватараАнтон
    Иконка календаря19 апреля 2026
    nodejspythonapimiddleИконка уровня middle

    PostgreSQL для разработчика: индексы, EXPLAIN и оптимизация запросов без DBA

    Разбираем оптимизацию запросов в PostgreSQL для разработчиков: индексы B-tree, чтение EXPLAIN ANALYZE, составные и частичные индексы, pg_stat_statements и практические приемы ускорения SQL-запросов без помощи DBA.

    Иконка чипа0
    Иконка глаза88
    Иконка комментариев0
    Картинка поста Как AI меняет code review: инструменты и практики для команды
    Иконка аватараАнтон
    Иконка календаря18 апреля 2026
    aidevopstestingmiddleИконка уровня middle

    Как AI меняет code review: инструменты и практики для команды

    AI code review в 2026 году сокращает время проверки кода на 40-60%. Разбираем лучшие инструменты — CodeRabbit, PR-Agent, Claude Code Review — и пошаговый план внедрения в команде.

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