Дженерики обычно пугают сильнее всего остального в TypeScript. В чужом коде встречается что-то вроде <T, K extends keyof T>(obj: T, key: K): T[K], и это выглядит как шифр. Поэтому дженерики часто обходят стороной: ставят any, приводят через as и надеются, что пронесёт. Код компилируется, но типы в нём больше ничего не проверяют.
На деле дженерик это просто параметр, только не для значения, а для типа. Вся сложность в том, что из нескольких простых идей собираются длинные конструкции. Если разобрать эти идеи по одной, длинная сигнатура превращается в набор знакомых кусочков.
Как это работает
23 коротких задания, от первой функции identity<T> до типов, которые вычисляют другие типы.
Каждое задание это маленький файл, в котором что-то не так: компилятор ругается, тип теряется по дороге или проверка пропускает то, что должна ловить. Твоя задача понять, в чём дело, и починить.
Всё происходит прямо в браузере. Открыл задание, поправил код, и тесты сразу показывают, всё ли верно. Если застрял, рядом лежит готовое решение с разбором: почему именно так, какие есть альтернативы и где этот приём встречается в реальном коде.
Не спеши открывать решение. Ошибки дженериков бывают длинными, но почти всегда точно говорят, что не так. Научиться их читать это половина навыка.
Что внутри
Основы. Параметры типа у функций, типов и классов, вывод T из аргументов, несколько параметров сразу.
Ограничения.extends, keyof, индексный доступ T[K] и почему ограничение проверяет тип, но не обрезает его.
Ловушки. Почему T нельзя собрать из литерала, как NoInfer не даёт расширять тип и почему дженерик только в результате означает скрытый as.
Типы из типов.keyof typeof, mapped-типы, условные типы, infer и распределение по union. По ходу ты сам напишешь свои Pick, Partial, ReturnType и NonNullable.
Что ты будешь уметь в конце
Читать типы библиотек. Сигнатуры из React, Zod или TanStack Query перестанут выглядеть как шифр: ты разберёшь их по частям.
Писать типизированные утилиты. Обёртки, хелперы и функции, которые принимают что угодно и при этом не теряют типы.
Обходиться без any и as. Ты будешь понимать, где приведение действительно нужно, а где оно прячет ошибку.
Что нужно знать заранее
Базовый TypeScript: type и interface, union, типизация функций, утилиты вроде Partial и Pick. Если ты прошёл курс «TypeScript для начинающих», этого хватит с запасом. React и Node.js не нужны, всё выполняется в браузере.
СЕРТИФИКАТ
Именной сертификат после выполнения всех заданий
Открывается, когда все задания курса закрыты. Имя на нём впишешь сам, файл скачивается сразу.