Вопрос проверяет понимание объединённых типов (Union Types) в TypeScript, их назначения и практического применения для повышения гибкости и безопасности типизации.
Union Types (объединённые типы) — это мощная конструкция системы типов TypeScript, которая позволяет переменной, параметру функции или возвращаемому значению принадлежать не к одному, а к нескольким типам. Это отражает реальные сценарии, когда значение может принимать разные формы в зависимости от контекста.
Синтаксис объединённого типа использует оператор вертикальной черты | между типами. Например, string | number означает, что значение может быть либо строкой, либо числом. Это позволяет точно описать домен возможных значений, не прибегая к типу any, который отключает проверку типов.
Union Types часто применяются в следующих ситуациях:
null или undefined в случае ошибки — тип результата будет SomeType | null.Loading | Success | Error.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, что лишило бы нас проверки типов и автодополнения.
Ключевой момент при работе с union — сужение типа. TypeScript не позволит выполнить операцию, специфичную для одного типа, пока вы не убедитесь, с каким именно вариантом работаете. Для этого используются проверки typeof, instanceof, проверки на равенство или пользовательские type guards.
Union Types — это фундаментальный инструмент для создания гибких, но типобезопасных интерфейсов. Они позволяют точно моделировать поведение программы, не жертвуя строгостью типизации.
Вывод: Используйте Union Types, когда значение, параметр или результат функции могут логически принадлежать к одному из нескольких типов. Это особенно полезно для обработки опциональных значений, моделирования различных состояний и работы с внешними API, где данные могут быть разного формата.