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.