Демистификация переключения типов в TypeScript: изучение различных методов

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

Методы переключения типов в TypeScript:

  1. Оператор typeof:
    Оператор typeof позволяет определить тип переменной во время выполнения. Он возвращает строку, представляющую тип переменной.
function getType(value: unknown): string {
  return typeof value;
}
const str = "Hello, TypeScript!";
const num = 42;
console.log(getType(str)); // Output: string
console.log(getType(num)); // Output: number
  1. Оператор экземпляра:
    Оператор экземпляра проверяет, является ли объект экземпляром определенного класса или интерфейса.
class Person {
  name: string;
  constructor(name: string) {
    this.name = name;
  }
}
const person = new Person("John");
console.log(person instanceof Person); // Output: true
console.log(person instanceof Object); // Output: true
  1. Защита типа.
    Защита типа — это условный оператор, который помогает сузить тип переменной в определенном блоке кода.
function processValue(value: string | number) {
  if (typeof value === "string") {
    console.log("Processing string:", value.toUpperCase());
  } else {
    console.log("Processing number:", value.toFixed(2));
  }
}
processValue("typescript"); // Output: Processing string: TYPESCRIPT
processValue(3.14159); // Output: Processing number: 3.14
  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  2;
  }
}
const square: Shape = { kind: "square", size: 5 };
const circle: Shape = { kind: "circle", radius: 3 };
console.log(calculateArea(square)); // Output: 25
console.log(calculateArea(circle)); // Output: 28.27

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