Middle
Czym są generyki?
sobes.tech AI
Odpowiedź od AI
Generyki w TypeScript pozwalają na tworzenie komponentów (funkcji, klas, interfejsów), które mogą działać z różnymi typami danych, zachowując bezpieczeństwo typów. Umożliwiają pisanie bardziej elastycznego i wielokrotnego użytku kodu, nie tracąc zalet statycznego typowania. Najprostszy przykład to użycie generyków w funkcjach do zwracania tego samego typu, co został przekazany jako argument.
// Funkcja, która przyjmuje argument dowolnego typu i zwraca go
function identity<T>(arg: T): T {
return arg;
}
// Użycie generyku z konkretnym typem - string
let outputString = identity<string>("łańcuch"); // Typ outputString będzie string
// Użycie generyku z automatycznym wyprowadzeniem typu - number
let outputNumber = identity(123); // Typ outputNumber będzie number
Generyki można również używać w klasach:
// Klasa pracująca z elementami dowolnego typu
class GenericBox<T> {
value: T;
constructor(initialValue: T) {
this.value = initialValue;
}
}
// Tworzenie instancji GenericBox z typem string
let stringBox = new GenericBox<string>("cześć");
// Tworzenie instancji GenericBox z typem boolean
let booleanBox = new GenericBox(true); // TypeScript wywnioskuje typ
I w interfejsach:
// Interfejs z generykiem
interface KeyValuePair<K, V> {
key: K;
value: V;
}
// Użycie interfejsu z konkretnymi typami
let stringNumberPair: KeyValuePair<string, number> = { key: "wiek", value: 30 };
Zalety używania generyków:
- Ponowne użycie kodu: Jedna struktura może być używana z różnymi typami danych.
- Bezpieczeństwo typów: Kompilator sprawdza typy podczas kompilacji, zapobiegając potencjalnym błędom.
- Czytelność i utrzymanie: Kod staje się bardziej zrozumiały, ponieważ wyraźnie widać, z jakimi typami pracuje komponent.
Generyki są często używane w bibliotekach i frameworkach, takich jak React (do typowania propsów komponentów), Redux (do typowania store), a także przy pracy z kolekcjami danych.