Как работает union в TypeScript?
Union и Intersection типы
Union (A | B) — тип, значение которого может быть одним из нескольких вариантов.
Пример
type Id = string | number;
function format(id: Id) {
if (typeof id === 'number') return id.toFixed(0);
return id.toUpperCase();
}Без проверки доступны только общие для всех вариантов операции. Проверка (typeof, in, instanceof, сравнение поля) сужает тип в ветке.
Дискриминированные объединения
type Result =
| { status: 'ok'; data: string }
| { status: 'error'; message: string };
function show(r: Result) {
if (r.status === 'ok') return r.data;
return r.message;
}Общее литеральное поле (status) позволяет TypeScript точно определить вариант. Через never в default можно проверить, что все варианты обработаны.
Коротко для собеседования
Union — «одно из»; работать с ним можно через сужение типов, а для объектов удобны дискриминированные объединения с общим полем.
Подробнее: TypeScript Handbook — Union Types