Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про TypeScript: TypeScript, Union Types, type safety, strict typing, type operator

Когда уместно использовать Union (или оператор |) в типах?

Вопрос проверяет понимание объединённых типов (Union Types) в TypeScript, их назначения и практического применения для повышения гибкости и безопасности типизации.

Короткий ответ

Union Types (объединённые типы) в TypeScript позволяют переменной, параметру функции или возвращаемому значению принадлежать к одному из нескольких типов. Это полезно, когда значение может быть, например, строкой или числом, или когда функция может вернуть объект определённой формы или null. Использование union повышает гибкость кода, сохраняя проверку типов на этапе компиляции. TypeScript будет требовать обработки всех возможных вариантов типа, что предотвращает ошибки времени выполнения.

Длинный ответ

Union Types (объединённые типы) — это мощная конструкция системы типов TypeScript, которая позволяет переменной, параметру функции или возвращаемому значению принадлежать не к одному, а к нескольким типам. Это отражает реальные сценарии, когда значение может принимать разные формы в зависимости от контекста.

Основная идея и синтаксис

Синтаксис объединённого типа использует оператор вертикальной черты | между типами. Например, string | number означает, что значение может быть либо строкой, либо числом. Это позволяет точно описать домен возможных значений, не прибегая к типу any, который отключает проверку типов.

Практическое применение

Union Types часто применяются в следующих ситуациях:

  • Функции, работающие с разными типами входных данных: Например, функция форматирования, которая принимает и строки, и числа.
  • Обработка возможных отсутствующих значений: Вместо того чтобы возвращать только объект, функция может вернуть null или undefined в случае ошибки — тип результата будет SomeType | null.
  • Моделирование состояний: Например, состояние загрузки данных можно представить как union: Loading | Success | Error.
  • Работа с DOM API: Свойство document.getElementById возвращает HTMLElement | null, потому что элемент может не существовать.

Пример кода

Рассмотрим функцию, которая форматирует значение для отображения. Она должна работать как с числами, так и со строками:

function formatValue(value: string | number): string {
    // TypeScript заставляет нас проверить тип перед операциями
    if (typeof value === 'string') {
        return value.toUpperCase();
    } else {
        // Здесь TypeScript знает, что value — number
        return value.toFixed(2);
    }
}

console.log(formatValue('hello')); // "HELLO"
console.log(formatValue(42.123));  // "42.12"

Без union типа пришлось бы использовать any, что лишило бы нас проверки типов и автодополнения.

Сужение типов (Type Narrowing)

Ключевой момент при работе с union — сужение типа. TypeScript не позволит выполнить операцию, специфичную для одного типа, пока вы не убедитесь, с каким именно вариантом работаете. Для этого используются проверки typeof, instanceof, проверки на равенство или пользовательские type guards.

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

Вывод: Используйте Union Types, когда значение, параметр или результат функции могут логически принадлежать к одному из нескольких типов. Это особенно полезно для обработки опциональных значений, моделирования различных состояний и работы с внешними API, где данные могут быть разного формата.

Уровень

  • Рейтинг:

    4

  • Сложность:

    3

Навыки

  • TypeScript

    TypeScript

Ключевые слова

#TypeScript

#Union Types

#type safety

#strict typing

#type operator

Подпишись на Python Developer в телеграм