Освоение TypeScript: раскрытие возможностей объединенных типов

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

  1. Использование оператора |:

Самый простой способ создать тип объединения — использовать оператор |. Вы можете определить переменную с типом объединения, перечислив нужные типы, разделенные |. Например:

let myVariable: string | number;
myVariable = "Hello";
myVariable = 42;

В этом примере myVariableможет содержать как строку, так и число.

  1. Тип защиты:

При работе с типами объединения вам может потребоваться выполнить различные операции в зависимости от конкретного типа переменной. 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используется в качестве средства защиты типа, позволяющего различать строку и число, обеспечивая различное поведение в зависимости от типа.

  1. Дискриминационные профсоюзы:

Дискриминированные объединения — это мощный шаблон, который позволяет создавать сложные типы путем объединения типов объединения с дискриминантным свойством. Дискриминантное свойство — это общее свойство, которое можно использовать для определения конкретного типа в объединении. Вот пример:

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определять конкретную форму и соответствующим образом вычислять площадь.

  1. Приведение типов:

При работе с типами объединения вы можете столкнуться с ситуациями, когда вам нужно явно указать TypeScript конкретный тип переменной. Этого можно добиться, используя приведение типов. Вот пример:

let myVariable: string | number = "Hello";
let myLength: number = (myVariable as string).length;
console.log(myLength); // Output: 5

В этом примере ключевое слово asиспользуется для приведения myVariableк строковому типу, что обеспечивает доступ к свойству length.

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