Основы TypeScript: Объединение, Литеральные и Размеченные типы

Источник: «TypeScript Basics (6/10): Union, Literal and Tagged Types»
Добро пожаловать в шестую часть нашей серии статей о TypeScript! В этой части мы рассмотрим объединение типов, литеральные типы и размеченное объединение типов, обеспечивающие точность и выразительность в определении типов.

Понимание этих возможностей позволит создавать более надёжные и тонкие системы типов. Присоединяйтесь к нам в этом путешествии по миру расширенных возможностей TypeScript в области типов.

Объединение типов

Объединение типов позволяет переменной иметь более одного типа. Для объединения типов используется оператор |.

type Result = number | string;

function displayResult(result: Result): void {
console.log(result);
}

displayResult(42); // Output: 42
displayResult("hello"); // Output: hello

В этом примере Result может быть как числом, так и строкой.

Литеральные типы

Литеральные типы позволяют указать точные значения, которые может иметь переменная. Это касается строковых литералов, числовых литералов, логических литералов и т. д.

type Direction = "up" | "down" | "left" | "right";

function move(direction: Direction): void {
console.log(`Moving ${direction}`);
}

move("up"); // Output: Moving up
move("right"); // Output: Moving right

Здесь Direction — это литеральный тип, представляющий конкретные строки "up", "down", "left" или "right".

Размеченное объединение типов

Tagged union type или Discriminated unions объявлены устаревшими и в текущей документации TypeScript отсутствуют. Но эту возможность можно использовать.

Размеченное объединение типов часто используется для моделирования сценариев, в которых значение может быть одним из нескольких типов, и вы хотите различать их с помощью общего свойства (тега).

interface Square {
kind: "square";
size: number;
}

interface Circle {
kind: "circle";
radius: number;
}

type Shape = Square | Circle;

function area(shape: Shape): number {
if (shape.kind === "square") {
return shape.size * shape.size;
} else {
return Math.PI * shape.radius * shape.radius;
}
}

const mySquare: Square = { kind: "square", size: 4 };
const myCircle: Circle = { kind: "circle", radius: 3 };

console.log(area(mySquare)); // Output: 16
console.log(area(myCircle)); // Output: 28.274333882308138

В этом примере Shape — это размеченное объединение типов, имеющее две возможные формы: Square и Circle. Свойство kind служит в качестве тега для различения двух форм.

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

Основы TypeScript

  1. Основы TypeScript: компилятор TypeScript (tsc) и tsconfig.json
  2. Основы TypeScript: JavaScript в сравнении с TypeScript
  3. Основы TypeScript: Примитивы и базовые типы
  4. Основы TypeScript: Неявные и Явные типы, Утверждения типов
  5. Основы TypeScript: Создание типов, перечислений и интерфейсов
  6. Основы TypeScript: Объединение, Литеральные и Размеченные типы
  7. Основы TypeScript: Типизация функций и сигнатур
  8. Основы TypeScript: Any, Void, Never, Null, Строгие проверки Null
  9. Основы TypeScript: ООП практика, классы и наследование

Дополнительные материалы

Предыдущая Статья

Совет по безопасности: Безопасна ли функция strip_tags()

Следующая Статья

Стратегии кэширования в Laravel