PassFront
  1. PassFront
  2. База знаний
  3. Продвинутые темы

Что такое 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>.

Другие вопросы раздела