===== Объединения union =====
Объединения или 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(" ")'', который объединяет все элементы массива в одну строку, разделенные пробелом.