Ответ
Generics в TypeScript позволяют создавать компоненты, работающие с разными типами, сохраняя типобезопасность. Это как параметры для типов.
function identity<T>(arg: T): T {
return arg;
}
let output1 = identity<string>("hello"); // тип string
let output2 = identity<number>(42); // тип number
Ключевые особенности:
- Позволяют избежать дублирования кода для разных типов
- Сохраняют информацию о типах
- Можно использовать в функциях, классах, интерфейсах
- Обеспечивают лучшую проверку типов, чем any
Пример с интерфейсом:
interface GenericArray<T> {
[index: number]: T;
}
Где <T> - это параметр типа, который можно заменить конкретным типом при использовании.
Ответ 18+ 🔞
Ну ты смотри, какие штуки придумали, блядь! Generics в TypeScript — это ж как будто ты приходишь в магазин и говоришь: «Дайте мне вот эту херню, но чтобы она подходила под что угодно, от огурцов до кирпичей, и при этом не разваливалась в руках!». По сути, это параметры для типов, ёпта. Не надо плодить десяток одинаковых функций, которые только типы разные принимают — сделал один шаблон, и пусть работает со всем, что подсовывают, но строго по правилам.
Вот смотри, как это выглядит, простейший пример:
function identity<T>(arg: T): T {
return arg;
}
let output1 = identity<string>("hello"); // тут тип string
let output2 = identity<number>(42); // а тут уже number
Видишь, <T>? Это как переменная, но для типа. Подставил string — функция работает со строками, подсунул number — уже с числами. И никакого хаоса, всё типобезопасно, не как с этим any, где можно влететь в такую дичь, что потом полдня ищешь, где у тебя всё посыпалось.
А главное, блядь, что это не только для функций. Это же, сука, универсальный инструмент! Кидаешь эти дженерики в классы, в интерфейсы — и они тоже становятся гибкими, но предсказуемыми.
Вот, например, интерфейс для массива, который может хранить что угодно, но что угодно одного типа:
interface GenericArray<T> {
[index: number]: T;
}
Объясняю на пальцах: объявил GenericArray<number> — и всё, этот массив теперь только для чисел. Попробуй запихнуть туда строку — компилятор тебе такую оплеуху выпишет, мало не покажется. Всё контролируется, никаких сюрпризов.
Короче, дженерики — это мощно. Это когда ты не пишешь одно и то же сто раз, а делаешь один умный шаблон, который потом сам подстраивается. Экономия времени — овердохуища, а ошибок на этапе разработки — в разы меньше. Ёперный театр, как же без этого жили-то раньше?