Middle
Какво са генериците?
sobes.tech AI
Отговор от AI
Генериците в TypeScript позволяват създаването на компоненти (функции, класове, интерфейси), които могат да работят с различни типове данни, като същевременно запазват безопасността на типовете. Те позволяват да пишете по-гъвкав и преизползваем код, без да губите предимствата на статичното типизиране. Най-простият пример е използването на генерики във функции, които връщат същия тип, който е бил предаден като аргумент.
// Функция, която приема аргумент от всеки тип и го връща
function identity<T>(arg: T): T {
return arg;
}
// Използване на генерик с конкретен тип - string
let outputString = identity<string>("низ"); // Типът на outputString ще бъде string
// Използване на генерик с автоматично извеждане на типа - number
let outputNumber = identity(123); // Типът на outputNumber ще бъде number
Генериците могат да се използват и в класове:
// Клас, който работи с елементи от всеки тип
class GenericBox<T> {
value: T;
constructor(initialValue: T) {
this.value = initialValue;
}
}
// Създаване на инстанция на GenericBox с тип string
let stringBox = new GenericBox<string>("здравей");
// Създаване на инстанция на GenericBox с тип boolean
let booleanBox = new GenericBox(true); // TypeScript ще изведе типа
И в интерфейси:
// Интерфейс с генерик
interface KeyValuePair<K, V> {
key: K;
value: V;
}
// Използване на интерфейса с конкретни типове
let stringNumberPair: KeyValuePair<string, number> = { key: "възраст", value: 30 };
Предимства на използването на генерики:
- Повторна употреба на кода: Структура може да се използва с различни типове данни.
- Безопасност на типовете: Компилаторът проверява типовете по време на компилация, предотвратявайки потенциални грешки.
- Четливост и поддръжка: Кодът става по-разбираем, тъй като ясно се вижда с какви типове работи компонентът.
Генериците често се използват в библиотеки и рамки, като React (за типизиране на пропсовете на компонентите), Redux (за типизиране на store) и при работа с колекции от данни.