Sobes.tech
Middle

Co jsou generika?

sobes.tech AI

Odpověď od AI

Generika v TypeScript umožňují vytvářet komponenty (funkce, třídy, rozhraní), které mohou pracovat s různými datovými typy, přičemž zachovávají bezpečnost typů. Umožňují psát flexibilnější a znovupoužitelný kód, aniž byste ztratili výhody statického typování. Nejjednodušším příkladem je použití generik ve funkcích, které vracejí stejný typ, jaký byl předán jako argument.

// Funkce, která přijímá argument libovolného typu a vrací jej
function identity<T>(arg: T): T {
    return arg;
}

// Použití generiku s konkrétním typem - string
let outputString = identity<string>("řetězec"); // Typ outputString bude string

// Použití generiku s automatickým odvozením typu - number
let outputNumber = identity(123); // Typ outputNumber bude number

Generika lze také použít ve třídách:

// Třída, která pracuje s prvky libovolného typu
class GenericBox<T> {
    value: T;
    constructor(initialValue: T) {
        this.value = initialValue;
    }
}

// Vytvoření instance GenericBox s typem string
let stringBox = new GenericBox<string>("ahoj");
// Vytvoření instance GenericBox s typem boolean
let booleanBox = new GenericBox(true); // TypeScript odvodí typ

A v rozhraních:

// Rozhraní s generikem
interface KeyValuePair<K, V> {
    key: K;
    value: V;
}

// Použití rozhraní s konkrétními typy
let stringNumberPair: KeyValuePair<string, number> = { key: "věk", value: 30 };

Výhody používání generik:

  • Znovupoužitelnost kódu: Struktura může být použita s různými datovými typy.
  • Bezpečnost typů: Kompilátor kontroluje typy během kompilace, čímž předchází potenciálním chybám.
  • Čitelnost a údržba: Kód je srozumitelnější, protože je jasné, s jakými typy komponent pracuje.

Generika jsou často používána v knihovnách a rámcích, například v Reactu (pro typování props komponent), Reduxu (pro typování store) a při práci s kolekcemi dat.