Обобщенные классы в TypeScript
Автор: Learn Language Hub
Загружено: 2025-12-29
Просмотров: 6
Обобщенный класс в TypeScript
Обобщенный класс в TypeScript — это класс, который работает с различными типами данных, сохраняя при этом высокую типобезопасность.
Представьте его как один многократно используемый класс, который может адаптироваться ко многим типам, не теряя корректности.
Почему нужны обобщенные классы
Без обобщений типобезопасность теряется:
class Box {
value: any;
constructor(value: any) {
this.value = value;
}
}
const box = new Box(123);
box.value.toUpperCase(); // ошибка времени выполнения
TypeScript здесь не защитит вас.
Основная идея обобщенного класса
Обобщенный класс использует параметр типа, обычно называемый T, для представления типа, который будет определен позже.
Концептуально:
Класс еще не знает тип
Тип выбирается при создании экземпляра
Один и тот же тип используется везде внутри класса
Пример обобщенного класса (концептуально)
class Box {
value: T;
constructor(value: T) {
this.value = value;
}
}
При создании объекта:
T становится числом
или T становится строкой
или любым другим типом
Логика класса остается неизменной.
Вывод типов (наиболее распространенное использование)
TypeScript обычно определяет тип автоматически:
const box = new Box("hello");
Здесь:
T рассматривается как строка
box.value — строка
методы строк разрешены
методы чисел отклонены
Обобщенный класс с методами
Обобщенные типы могут использоваться в свойствах и методах.
class Storage {
private items: T[] = [];
add(item: T) {
this.items.push(item);
}
getAll() {
return this.items;
}
}
Это гарантирует:
Хранится только один тип
Отсутствие смешивания несовместимых значений
Несколько обобщенных типов
Класс может работать с несколькими типами одновременно.
Концептуально:
Один тип для ключа
Один тип для значения
class KeyValuePair {
key: K;
value: V;
constructor(key: K, value: V) {
this.key = key;
this.value = value;
}
}
Это распространено в картах, кэшах и словарях.
Обобщенные ограничения (ограничивающие типы)
Иногда требуется разрешить только определенные типы.
Пример правила:
Тип должен иметь свойство length
class LengthLogger {
log(value: T) {
console.log(value.length);
}
}
Разрешено:
строки
массивы
Не разрешено:
числа
логические значения
Обобщенный класс с интерфейсами
Обобщенные классы часто используются с интерфейсами для создания многократно используемых систем, таких как репозитории или сервисы.
Концепция:
Интерфейс определяет поведение
Обобщенный класс предоставляет реализацию
Тип остается неизменным
Этот шаблон чрезвычайно распространен в бэкенд- и фронтенд-приложениях.
Важное правило о статических и обобщенных типах
Статические члены:
Принадлежат классу
НЕ знают, какой тип обобщенного типа
Таким образом:
Методы экземпляра могут использовать T
Статические методы не могут использовать T
Это распространенная ошибка начинающих.
Когда использовать обобщенный класс
Используйте обобщенный класс, когда:
Одна и та же логика работает для многих типов
Вам нужна строгая типобезопасность
Типы должны оставаться согласованными между методами
Избегайте обобщенных классов, когда:
Типы не связаны между собой
Достаточно простого специфического класса
Объединяющий тип был бы проще
Доступные форматы для скачивания:
Скачать видео mp4
-
Информация по загрузке: