TypeScript предоставляет мощные функции системы типов, которые улучшают процесс разработки и помогают обнаруживать ошибки на ранних этапах. Одной из таких функций являются типы объединения, которые позволяют определять переменную, которая может содержать значения нескольких типов. В этой статье мы рассмотрим различные методы использования типов объединения в TypeScript, а также приведем примеры кода, чтобы продемонстрировать их практическое применение.
- Основные типы объединения.
Самая простая форма типа объединения — это когда вы хотите, чтобы переменная принимала один из двух или более конкретных типов. Например:
let age: number | string;
age = 25; // Valid
age = "twenty-five"; // Valid
age = true; // Invalid, as boolean is not part of the union type
- Защита типов:
Защита типов — это условные операторы, позволяющие сузить возможные типы внутри объединения. Они помогают безопасно выполнять операции конкретного типа. Вот пример:
function printMessage(message: string | number) {
if (typeof message === "string") {
console.log("Message is a string:", message.toUpperCase());
} else {
console.log("Message is a number:", message.toFixed(2));
}
}
printMessage("Hello"); // Output: Message is a string: HELLO
printMessage(42); // Output: Message is a number: 42.00
- Дискриминированные объединения.
Дискриминированные объединения позволяют создавать сложные типы объединений с общим свойством, называемым дискриминантом, которое определяет фактический тип. Это полезно при работе с объектами, имеющими разные наборы свойств. Рассмотрим следующий пример:
interface Square {
kind: "square";
size: number;
}
interface Circle {
kind: "circle";
radius: number;
}
type Shape = Square | Circle;
function calculateArea(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 };
console.log(calculateArea(square)); // Output: 25
const circle: Circle = { kind: "circle", radius: 3 };
console.log(calculateArea(circle)); // Output: 28.27
- Типы объединения, допускающие значение NULL.
Вы также можете включитьnull
илиundefined
как часть типа объединения для представления необязательных значений. Вот пример:
let name: string | null = "John";
name = null; // Valid
name = undefined; // Invalid, as undefined is not part of the union type
Типы объединения TypeScript предоставляют гибкий и мощный способ определения переменных, которые могут содержать значения нескольких типов. В этой статье мы исследовали различные методы использования типов объединения, включая базовые объединения, защиту типов, дискриминируемые объединения и типы объединения, допускающие значение NULL. Понимание этих методов позволит вам писать более надежный и типобезопасный код в ваших проектах TypeScript.