Middle
Kas yra generikai?
sobes.tech AI
Atsakymas iš AI
TypeScript generikai leidžia kurti komponentus (funkcijas, klases, sąsajas), kurie gali dirbti su įvairiais duomenų tipais, tuo pačiu išlaikydami tipų saugumą. Jie leidžia rašyti lankstesnį ir pakartotinai naudojamą kodą, neprarandant statinio tipų tikrinimo privalumų. Paprasčiausias pavyzdys – generikų naudojimas funkcijose, grąžinančiose tą patį tipą, kuris buvo perduotas kaip argumentas.
// Funkcija, priimanti bet kokio tipo argumentą ir jį grąžinanti
function identity<T>(arg: T): T {
return arg;
}
// Naudojimas su konkrečiu tipu – string
let outputString = identity<string>("eilutė"); // outputString tipas bus string
// Naudojimas su automatinio tipo išvedimu – number
let outputNumber = identity(123); // outputNumber tipas bus number
Generikus galima naudoti ir klasėse:
// Klasė, dirbanti su bet kokio tipo elementais
class GenericBox<T> {
value: T;
constructor(initialValue: T) {
this.value = initialValue;
}
}
// Sukurti GenericBox su string tipu
let stringBox = new GenericBox<string>("sveiki");
// Sukurti GenericBox su boolean tipu
let booleanBox = new GenericBox(true); // TypeScript išves tipą
Ir sąsajose:
// Generiką naudojanti sąsaja
interface KeyValuePair<K, V> {
key: K;
value: V;
}
// Naudojimas su konkrečiais tipais
let stringNumberPair: KeyValuePair<string, number> = { key: "amžius", value: 30 };
Generikų privalumai:
- Kodo pakartotinis naudojimas: Vieną struktūrą galima naudoti su skirtingais duomenų tipais.
- Tipų saugumas: Kompiliatorius tikrina tipus, užkertant kelią galimoms klaidoms.
- Skaitomumas ir palaikymas: Kodo aiškumas didėja, nes matyti, su kokiais tipais dirba komponentas.
Generikai dažnai naudojami bibliotekose ir karkasuose, tokiuose kaip React (propų tipizavimui), Redux (sandėlio tipizavimui), taip pat dirbant su duomenų kolekcijomis.