TypeScript — это мощная статически типизированная расширенная версия JavaScript, которая расширяет возможности разработки за счет добавления статической типизации в код JavaScript. Одной из ключевых функций TypeScript являются типы объединения, которые позволяют объединять несколько типов в один тип. В этой статье мы рассмотрим различные методы и приемы использования типов объединения в TypeScript, используя разговорный язык и примеры кода.
- Использование оператора
|:
Самый простой способ создать тип объединения — использовать оператор |. Вы можете определить переменную с типом объединения, перечислив нужные типы, разделенные |. Например:
let myVariable: string | number;
myVariable = "Hello";
myVariable = 42;
В этом примере myVariableможет содержать как строку, так и число.
- Тип защиты:
При работе с типами объединения вам может потребоваться выполнить различные операции в зависимости от конкретного типа переменной. TypeScript предоставляет средства защиты типа, которые помогут вам определить тип переменной во время выполнения. Вот пример:
function printValue(value: string | number) {
if (typeof value === "string") {
console.log("The value is a string: " + value.toUpperCase());
} else {
console.log("The value is a number: " + value.toFixed(2));
}
}
printValue("hello");
printValue(3.14159);
В этом примере оператор typeofиспользуется в качестве средства защиты типа, позволяющего различать строку и число, обеспечивая различное поведение в зависимости от типа.
- Дискриминационные профсоюзы:
Дискриминированные объединения — это мощный шаблон, который позволяет создавать сложные типы путем объединения типов объединения с дискриминантным свойством. Дискриминантное свойство — это общее свойство, которое можно использовать для определения конкретного типа в объединении. Вот пример:
interface Square {
kind: "square";
size: number;
}
interface Circle {
kind: "circle";
radius: number;
}
type Shape = Square | Circle;
function area(shape: Shape): number {
switch (shape.kind) {
case "square":
return shape.size * shape.size;
case "circle":
return Math.PI * shape.radius * shape.radius;
}
}
const square: Square = { kind: "square", size: 5 };
const circle: Circle = { kind: "circle", radius: 3 };
console.log(area(square)); // Output: 25
console.log(area(circle)); // Output: 28.274333882308138
В этом примере свойство kindдействует как дискриминант, позволяя функции areaопределять конкретную форму и соответствующим образом вычислять площадь.
- Приведение типов:
При работе с типами объединения вы можете столкнуться с ситуациями, когда вам нужно явно указать TypeScript конкретный тип переменной. Этого можно добиться, используя приведение типов. Вот пример:
let myVariable: string | number = "Hello";
let myLength: number = (myVariable as string).length;
console.log(myLength); // Output: 5
В этом примере ключевое слово asиспользуется для приведения myVariableк строковому типу, что обеспечивает доступ к свойству length.р>
Объединенные типы — это ценный инструмент в TypeScript, который позволяет объединять несколько типов в один. Используя типы объединения, средства защиты типов, распознаваемые объединения и приведение типов, вы можете писать более выразительный и надежный код. Понимание и освоение типов объединения значительно улучшит ваши навыки разработки TypeScript.