Объединения или union не являются собственно типом данных, но они позволяют комбинировать или объединить другие типы. Так, с помощью объединений можно определить переменную, которая может хранить значение двух или более типов:
let id : number | string; id = "1345dgg5"; console.log(id); // 1345dgg5 id = 234; console.log(id); // 234
Чтобы определить все типы, которые должно представлять переменная, все эти типы разделяются прямой чертой: number | string
.
В данном случае переменная id
может представлять как тип string
, то есть строку, так и число.
Подобным образом можно использовать union для определения параметров функции:
function printId(id: number|string){ console.log(`Id: ${id}`); }
Здесь функция printId()
в качестве параметра id может принимать как значения типа number
, так и значения типа string
.
function printId(id: number|string){ console.log(`Id: ${id}`); } let id: string|number = "ruy74"; printId("1h2e3l4o5"); printId(9876); printId(id);
Тип union подходит для тех ситуаций, когда логика работы со всеми объединенными типами однообразна, например, как в случае выше, где значение извне встраивается в строку и выводится на консоли. Вне зависимости от типа действия одинаковы.
Однако иногда логика может различаться в зависимости от переданного типа. В этом случае можно использовать проверку на тип, чтобы разграничить логику для различных типов:
function printSentence(words: string[]|string){ // если words - строка if (typeof words === "string") { console.log(words); } else { // Если words - массив string[] console.log(words.join(" ")); } } printSentence(["Язык", "программирования", "TypeScript"]); printSentence("Язык программирования JavaScript");
В данном случае функция printSentence()
может принимать как строку, так и массив строк, чтобы затем вывести строки на консоль.
И в зависимости от типа данных действия отличаются. Так, для массива применяется метод words.join(" ")
, который объединяет все элементы
массива в одну строку, разделенные пробелом.