Изучение дженериков TypeScript: обработка нескольких типов

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

Метод 1: типы объединения
Один из способов обработки нескольких типов с помощью дженериков — использование типов объединения. Типы объединения позволяют указать, что параметр универсального типа может быть одним из нескольких возможных типов. Вот пример:

function printValue<T>(value: T): void {
  console.log(value);
}
printValue<string>('Hello'); // Output: Hello
printValue<number>(42); // Output: 42

Метод 2: типы пересечений
Другой подход — использование типов пересечений. Типы пересечений позволяют объединять несколько типов в один тип. Это может быть полезно, если вы хотите определить универсальный тип, который должен удовлетворять нескольким ограничениям. Вот пример:

interface Printable {
  print(): void;
}
interface Loggable {
  log(): void;
}
function processValue<T extends Printable & Loggable>(value: T): void {
  value.print();
  value.log();
}
const obj: { print(): void, log(): void } = {
  print() {
    console.log('Printing...');
  },
  log() {
    console.log('Logging...');
  }
};
processValue(obj); // Output: Printing... Logging...

Метод 3: защита типа
Защита типа позволяет сузить тип универсального параметра на основе условий времени выполнения. Вы можете использовать защиту типа для выполнения различных операций в зависимости от фактического типа значения. Вот пример:

function processValue<T>(value: T): void {
  if (typeof value === 'string') {
    console.log('Processing string:', value.toUpperCase());
  } else if (Array.isArray(value)) {
    console.log('Processing array:', value.length);
  } else {
    console.log('Unknown type:', typeof value);
  }
}
processValue('Hello'); // Output: Processing string: HELLO
processValue([1, 2, 3]); // Output: Processing array: 3

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

function processValue(value: string): void;
function processValue(value: number): void;
function processValue(value: any): void {
  console.log('Processing value:', value);
}
processValue('Hello'); // Output: Processing value: Hello
processValue(42); // Output: Processing value: 42

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

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