
Урок 07 · 11 хв
Generics
Одна функція, тип протягується наскрізь. Не абстракція заради абстракції.
Дженерик — змінна типу. Ти вже ними користуєшся: Promise<User>, Array<string>, Record<string, User>. Пиши свій, коли функція працює з «чим завгодно», але ти хочеш зберегти конкретний тип на виході. Handbook: Generics.
Компілятор часто виведе T з аргументу: first(["a"]) уже string. Явно писати first<string>(...) треба, коли виведення немає або хочеш звузити. Обмеження T extends { id: string } — не наслідування класу, а «значення має мати хоча б це поле».
keyof T — ключі об'єкта як union рядків. T[K] — тип поля за ключем. Разом це Indexed Access Types, найкорисніший дженерик-патерн у звичайному коді: pick(obj, "name") повертає саме тип name, а не string | number.
- Generics — навіщо
Tі як його виводить компілятор - Generic Constraints —
T extends { id: string } - Keyof Type Operator — ключі об'єкта як union
Перевірка
Закріпи, поки не пішов далі
1. Навіщо
Tуfunction wrap<T>(x: T): T?2. Що означає
T extends { id: string }?