TypeScript Essentials

Урок 07 · 11 хв

Generics

Одна функція, тип протягується наскрізь. Не абстракція заради абстракції.

Дженерик — змінна типу. Ти вже ними користуєшся: Promise<User>, Array<string>, Record<string, User>. Пиши свій, коли функція працює з «чим завгодно», але ти хочеш зберегти конкретний тип на виході. Handbook: Generics.

Компілятор часто виведе T з аргументу: first(["a"]) уже string. Явно писати first<string>(...) треба, коли виведення немає або хочеш звузити. Обмеження T extends { id: string } — не наслідування класу, а «значення має мати хоча б це поле».

Без дженерика тип губиться
Обмеження: T має вміти id
AI

Можна спитати про це правило«Коли не треба»

Кілька параметрів і default

keyof T — ключі об'єкта як union рядків. T[K] — тип поля за ключем. Разом це Indexed Access Types, найкорисніший дженерик-патерн у звичайному коді: pick(obj, "name") повертає саме тип name, а не string | number.

AI

Можна спитати про цей пункт«Суть уроку»

Перевірка

Закріпи, поки не пішов далі

  1. 1. Навіщо T у function wrap<T>(x: T): T?

  2. 2. Що означає T extends { id: string }?