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.