Sobes.tech
Middle

Ի՞նչ են գեներիկաները։

sobes.tech AI

Պատասխան AI-ից

Ջեներիկները (generics) TypeScript-ում թույլ են տալիս ստեղծել կոմպոնենտներ (ֆունկցիաներ, դասեր, ինտերֆեյսներ), որոնք կարող են աշխատել տարբեր տվյալների տիպերով՝ միաժամանակ պահպանելով տիպային անվտանգության ապահովումը: Նրանք թույլ են տալիս գրել ավելի ճկուն և վերաօգտագործվող կոդ, չկորցնելով ստատիկ տիպավորման առավելությունները: Ամենահեշտ օրինակն է՝ դженերիկների օգտագործումը ֆունկցիաներում՝ նույն տիպի վերադարձնելու համար, ինչ տիպը փոխանցվել է որպես արգումենտ:

// Ֆունկցիա, որը ընդունում է ցանկացած տիպի արգումենտ և վերադարձնում է այն
function identity<T>(arg: T): T {
    return arg;
}

// Դժգույն օգտագործում կոնկրետ տիպով՝ string
let outputString = identity<string>("տող"); // outputString-ի տիպը կլինի string

// Դժգույն օգտագործում ավտոմատ տիպի արտահայտմամբ՝ number
let outputNumber = identity(123); // outputNumber-ի տիպը կլինի number

Դженերիկները կարելի է օգտագործել նաև դասերում:

// Դաս, որը աշխատում է ցանկացած տիպի էլեմենտների հետ
class GenericBox<T> {
    value: T;
    constructor(initialValue: T) {
        this.value = initialValue;
    }
}

// Ստեղծում ենք String տիպի GenericBox օրինակ
let stringBox = new GenericBox<string>("հայերեն");
// Ստեղծում ենք boolean տիպի GenericBox օրինակ
let booleanBox = new GenericBox(true); // TypeScript-ը կարտահայտի տիպը

Եվ ինտերֆեյսներում:

// Ինտերֆեյս՝ դженերիկով
interface KeyValuePair<K, V> {
    key: K;
    value: V;
}

// Կիրառում ենք կոնկրետ տիպերով
let stringNumberPair: KeyValuePair<string, number> = { key: "տարիք", value: 30 };

Դժգույնների օգտագործման առավելությունները՝

  • Կոդի վերաօգտագործում: Միևնույն կառուցվածքը կարող է օգտագործվել տարբեր տիպերի տվյալների հետ:
  • Տիպային անվտանգության ապահովում: Կոմպիլյատորը ստուգում է տիպերը՝ նախքան կոդը գործարկելը՝ կանխելով հնարավոր սխալները:
  • Կարդալելիություն և սպասարկում: Կոդը ավելի հստակ է՝ պարզ երևում է, թե ինչ տիպերով է աշխատում կոմպոնենտը:

Դженերիկները հաճախ օգտագործվում են գրադարաններում և ֆրեյմվորկներում՝ React (պրոպսների տիպավորելու համար), Redux (ստորին տիպավորման համար), ինչպես նաև տվյալների հավաքածուների աշխատանքի ժամանակ։