Демистификация типов объединения TypeScript: подробное руководство

TypeScript предоставляет мощные функции системы типов, которые улучшают процесс разработки и помогают обнаруживать ошибки на ранних этапах. Одной из таких функций являются типы объединения, которые позволяют определять переменную, которая может содержать значения нескольких типов. В этой статье мы рассмотрим различные методы использования типов объединения в TypeScript, а также приведем примеры кода, чтобы продемонстрировать их практическое применение.

  1. Основные типы объединения.
    Самая простая форма типа объединения — это когда вы хотите, чтобы переменная принимала один из двух или более конкретных типов. Например:
let age: number | string;
age = 25; // Valid
age = "twenty-five"; // Valid
age = true; // Invalid, as boolean is not part of the union type
  1. Защита типов:
    Защита типов — это условные операторы, позволяющие сузить возможные типы внутри объединения. Они помогают безопасно выполнять операции конкретного типа. Вот пример:
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
  1. Дискриминированные объединения.
    Дискриминированные объединения позволяют создавать сложные типы объединений с общим свойством, называемым дискриминантом, которое определяет фактический тип. Это полезно при работе с объектами, имеющими разные наборы свойств. Рассмотрим следующий пример:
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
  1. Типы объединения, допускающие значение 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.