Дженерики, или параметризованные типы, позволяют писать более гибкие функции и интерфейсы. Чтобы зайти дальше, чем параметризация одним типом, необходимо понять лишь несколько общих принципов составления дженериков — и TypeScript раскроется перед вами, как шкатулка с секретом. Расскажу, как не бояться вкладывать дженерики друг в друга и как использовать автоматический вывод типов в ваших проектах.
В текстовом формате: https://habr.com/ru/company/yandex/blog/555520/