Представь, что ты написал функцию, которая переворачивает массив.
Сначала она работает только с числами. Потом понадобились строки. Потом объекты.
Что делать? 🤔
Создавать три одинаковые функции?
❌ Не очень удобно.
Использовать any?
❌ Мы уже знаем, чем это заканчивается. 😅
💡 Именно для этого в TypeScript существуют Generics.
Они позволяют сказать функции:
«Я пока не знаю, с каким типом ты будешь работать. Но когда вызовут — используй именно его.»
То есть вместо одной функции для чисел и второй для строк ты пишешь одну универсальную, которая сохраняет информацию о типе данных. 🚀
В результате:
✅ передал массив чисел — получишь массив чисел;
✅ передал строки — вернутся строки;
✅ передал объекты — останутся объекты.
Без потери типов и без магического any. ✨
По сути, Generics делают функцию умнее.
Она перестаёт быть привязанной к одному типу данных и начинает работать с любыми, не забывая, что именно ей передали.
Именно поэтому Generics встречаются практически везде:
📦 в массивах;
⚛️ в React-хуках;
🌐 в API-запросах;
📚 в популярных библиотеках.
Сначала синтаксис с угловыми скобками может выглядеть пугающе. 😬
Но когда понимаешь идею, оказывается, что Generics — это всего лишь способ написать код один раз, а использовать его для любых типов безопасно и без копипаста.
💬 А у вас тоже при виде <T> в начале всё казалось каким-то древним заклинанием? Или Generics сразу стали понятны?