Продвинутые дженерики в TypeScript

Дженерики, или параметризованные типы, позволяют писать более гибкие функции и интерфейсы. Чтобы зайти дальше, чем параметризация одним типом, необходимо понять лишь несколько общих принципов составления дженериков — и TypeScript раскроется перед вами, как шкатулка с секретом. Расскажу, как не бояться вкладывать дженерики друг в друга и как использовать автоматический вывод типов в ваших проектах.