Sobes.tech
Middle

Mi a generikus?

sobes.tech MI

Válasz az MI-től

A TypeScript generikusok lehetővé teszik olyan komponensek (függvények, osztályok, interfészek) létrehozását, amelyek különböző adattípusokkal működhetnek, miközben megőrzik a típusbiztonságot. Ezek lehetővé teszik rugalmasabb és újrahasznosítható kód írását anélkül, hogy elveszítenénk a statikus típusellenőrzés előnyeit. A legegyszerűbb példa a generikusok használata függvényekben, hogy ugyanazt a típust adják vissza, mint amit argumentumként adtak meg.

// Függvény, amely bármilyen típusú argumentumot fogad és visszaadja
function identity<T>(arg: T): T {
    return arg;
}

// Generikus használata konkrét típussal - string
let outputString = identity<string>("szöveg"); // Az outputString típusa string lesz

// Generikus használata automatikus típuskinyeréssel - number
let outputNumber = identity(123); // Az outputNumber típusa number lesz

A generikusokat osztályokban is lehet használni:

// Osztály, amely bármilyen típusú elemekkel dolgozik
class GenericBox<T> {
    value: T;
    constructor(initialValue: T) {
        this.value = initialValue;
    }
}

// Példa egy string típusú GenericBox példány létrehozására
let stringBox = new GenericBox<string>("szia");
// Példa egy boolean típusú GenericBox példány létrehozására
let booleanBox = new GenericBox(true); // A TypeScript kitalálja a típust

És interfészekben:

// Generikus interfész
interface KeyValuePair<K, V> {
    key: K;
    value: V;
}

// Konkrét típusokkal való használat
let stringNumberPair: KeyValuePair<string, number> = { key: "kor", value: 30 };

A generikusok használatának előnyei:

  • Kód újrahasznosítása: Egy szerkezet különböző típusú adatokkal használható.
  • Típusbiztonság: A fordító ellenőrzi a típusokat fordítás közben, megelőzve a potenciális hibákat.
  • Átláthatóság és karbantarthatóság: A kód könnyebben érthető, mivel egyértelmű, hogy a komponens milyen típusokkal dolgozik.

A generikusokat gyakran használják könyvtárakban és keretrendszerekben, például a React-ben (a komponensek propjainak típusozására), a Reduxban (a store típusozására), valamint adatgyűjteményekkel való munkánál.