Sobes.tech
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) и при работа с колекции от данни.