Что такое Generics?
Продвинутые темы
Generics (обобщения) — это возможность TypeScript писать компоненты, функции и типы, работающие с разными типами данных, сохраняя при этом типобезопасность.
Проблема, которую решают
Без дженериков пришлось бы либо дублировать код под каждый тип, либо использовать any и терять проверку типов.
// any теряет тип
function firstAny(arr: any[]): any {}
// generic сохраняет тип
function first<T>(arr: T[]): T {
return arr[0];
}
first([1, 2, 3]); // T = number
first(['a', 'b']); // T = stringГде применяют
- Функции —
identity<T>(x: T): T. - Интерфейсы/типы —
Array<T>,Promise<T>,Record<K, V>. - Классы — контейнеры, коллекции.
- Ограничения —
<T extends { id: number }>сужают допустимые типы.
function getId<T extends { id: number }>(item: T): number {
return item.id;
}Дефолтные и множественные параметры
interface ApiResponse<T = unknown> {
data: T;
status: number;
}
function pair<A, B>(a: A, b: B): [A, B] {
return [a, b];
}Коротко для собеседования
Дженерики — параметры типа, позволяющие писать переиспользуемый типобезопасный код без any. T подставляется при вызове; extends задаёт ограничения. На них построены Array<T>, Promise<T>, Record<K,V>.