(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': data().getTime(),įvykis:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-5LHNRP9'); TypeScript - The Codest bendriniai vaistai
The Codest
  • Apie mus
  • Paslaugos
    • Programinės įrangos kūrimas
      • Priekinės dalies kūrimas
      • Galinės dalies kūrimas
    • Staff Augmentation
      • Priekinės dalies kūrėjai
      • Atgalinės versijos kūrėjai
      • Duomenų inžinieriai
      • Debesų inžinieriai
      • QA inžinieriai
      • Kita
    • Patariamoji tarnyba
      • Auditas ir konsultacijos
  • Pramonės šakos
    • Fintech ir bankininkystė
    • E-commerce
    • Adtech
    • Sveikatos technologijos
    • Gamyba
    • Logistika
    • Automobiliai
    • IOT
  • Vertė už
    • CEO
    • CTO
    • Pristatymo vadybininkas
  • Mūsų komanda
  • Case Studies
  • Sužinokite, kaip
    • Tinklaraštis
    • Susitikimai
    • Interneto seminarai
    • Ištekliai
Karjera Susisiekite su mumis
  • Apie mus
  • Paslaugos
    • Programinės įrangos kūrimas
      • Priekinės dalies kūrimas
      • Galinės dalies kūrimas
    • Staff Augmentation
      • Priekinės dalies kūrėjai
      • Atgalinės versijos kūrėjai
      • Duomenų inžinieriai
      • Debesų inžinieriai
      • QA inžinieriai
      • Kita
    • Patariamoji tarnyba
      • Auditas ir konsultacijos
  • Vertė už
    • CEO
    • CTO
    • Pristatymo vadybininkas
  • Mūsų komanda
  • Case Studies
  • Sužinokite, kaip
    • Tinklaraštis
    • Susitikimai
    • Interneto seminarai
    • Ištekliai
Karjera Susisiekite su mumis
Atgal rodyklė GRĮŽTI ATGAL
2020-07-13
Programinės įrangos kūrimas

Bendrieji vaistai, esantys TypeScript

Mateusz Staniuk

Bendriniai kodai - tai daugkartinio naudojimo kodo dalys, kurios veikia su keliais tipais, o ne su vienu tipu. Generics suteikia galimybę tipą laikyti kintamuoju ir nurodyti jį naudojant, panašiai kaip funkcijų parametrus.

Bendrines funkcijas galima naudoti kartu su funkcijomis (sukuriant bendrąją funkciją), klasėmis (sukuriant bendrąją klasę) ir sąsajomis (sukuriant bendrąją sąsają).

Pagrindinis naudojimas

Tikriausiai praeityje naudojote generinius kodus net to nežinodami - dažniausiai generiniai kodai naudojami deklaruojant masyvą:

const myArray: string[];

Iš pirmo žvilgsnio tai nėra pernelyg ypatinga, mes tiesiog deklaruojame myArray kaip eilutės masyvą, tačiau tai yra tas pats, kas ir bendroji deklaracija:

const myArray: Array;

Aiškios nuostatos

Pradėkime nuo labai paprasto pavyzdžio - kaip galėtume perkelti šį vanilinį JS funkciją į TypeScript:

funkcija getPrefiledArray(filler, length) {
    return (new Array(length)).fill(filler);
}

Ši funkcija grąžins masyvą, užpildytą nurodytu kiekiu užpildas, todėl ilgis bus numeris ir visa funkcija grąžins masyvą užpildas - bet kas yra užpildas? Šiuo metu tai gali būti bet kas, todėl viena iš galimybių yra naudoti bet kuris:

funkcija getPrefiledArray(filler: any, length: number): any[] {
    return (new Array(length)).fill(filler);
}

Naudojant bet kuris tikrai yra bendras - galime perduoti tiesiogine prasme bet ką, todėl apibrėžimo nuostata “dirbti su keliais tipais, o ne su vienu tipu” yra visiškai įvykdyta, tačiau prarandame ryšį tarp užpildas tipą ir grąžinimo tipą. Šiuo atveju norime grąžinti kokį nors bendrą dalyką ir galime aiškiai apibrėžti šį bendrą dalyką kaip tipo parametras:

funkcija getPrefiledArray(filler: T, length: number): T[] {
    return (new Array(length)).fill(filler);
}

ir naudokite taip:

const prefilledArray = getPrefiledArray(0, 10);

Bendrieji apribojimai

Panagrinėkime kitus, tikriausiai dažniau pasitaikančius atvejus. Kodėl mes iš tikrųjų naudojame tipus funkcijose? Man - tam, kad užtikrintume, jog funkcijai perduodami argumentai turės tam tikras savybes, su kuriomis noriu sąveikauti.

Dar kartą pabandykime perkelti paprastą vanilinę JS funkciją į TS.

funkcija getLength(thing) {
    return thing.length;
}

Turime netrivialų galvosūkį - kaip užtikrinti, kad daiktas turėtų ilgis savybė, ir pirma mintis gali būti, kad reikia daryti kažką panašaus į:

funkcija getLength(thing: typeof Array):number {
    return thing.length;
}

ir, priklausomai nuo konteksto, tai gali būti teisinga, apskritai mes esame šiek tiek bendri - tai veiks su kelių tipų masyvais, bet ką daryti, jei iš tikrųjų nežinome, ar daiktas visada turėtų būti masyvas - galbūt daiktas yra futbolo aikštė arba banano žievelė? Tokiu atveju turime surinkti bendrąsias to daikto savybes į konstrukciją, galinčią apibrėžti objekto savybes - sąsają:

sąsaja IThingWithLength {
  length: skaičius;
}

Galime naudoti IThingWithLength sąsaja kaip tipas dalykas parametras:

funkcija getLength(thing: IThingWithLength):number {
    return thing.length;
}

atvirai kalbant, šiame paprastame pavyzdyje tai bus visiškai gerai, bet jei norime, kad šis tipas būtų bendras, ir nesusidurtume su pirmojo pavyzdžio problema, galime naudoti Bendrieji apribojimai:

funkcija getLength(thing: T):number {
    return thing.length;
}

ir naudokite jį:

sąsaja IBananaPeel {
  storis: skaičius;
  ilgis: skaičius;
}

const bananaPeel: IBananaPeel = {thickness: 0.2, length: 3.14};
getLength(bananaPeel);

Naudojant išplečia užtikrina, kad T bus pateiktos savybės, kurias apibrėžia IThingWithLength.

Bendrosios klasės

Iki šiol dirbome su bendrosiomis funkcijomis, tačiau tai ne vienintelė vieta, kur bendrinės funkcijos yra puikios, todėl pažiūrėkime, kaip galime jas įtraukti į klases.

Pirmiausia pabandykime bananų krepšelyje laikyti bananų kekę:

klasė Banana {
  konstruktorius(
    public length: skaičius,
    public color: string,
    public jonizingRadiation: number
  ) {}
}

klasė BananaBasket {
  private bananas: Banana[] = [];

  add(banana: Banana): void {
    this.bananas.push(banana);
  }
}

const bananaBasket = new BananaBasket();
bananaBasket.add(new Banana(3.14, ‘red’, 10e-7));

Dabar pabandykime sukurti bendros paskirties krepšelį, į skirtingus dalykus su tuo pačiu tipu:

klasė Basket {
  private stuff: T[] = [];

  add(thing: T): void {
    this.stuff.push(thing);
  }
}

const bananaBasket = new Basket();

Ir galiausiai, tarkime, kad mūsų krepšys yra radioaktyviųjų medžiagų talpykla ir kad jame galime laikyti tik tokias medžiagas, kurios turi jonizuojančioji spinduliuotė nuosavybė:

sąsaja IRadioactive {
  ionizingRadiation: number;
}

klasė RadioactiveContainer {
  private stuff: T[] = [];

  add(thing: T): void {
    this.stuff.push(thing);
  }
}

Bendroji sąsaja

Galiausiai pabandykime surinkti visas žinias ir sukurti radioaktyvią imperiją, taip pat naudodami bendrąsias sąsajas:

// Apibrėžti bendrus konteinerių atributus
sąsaja IRadioactive {
  ionizingRadiation: number;
}


// Apibrėžti kažką, kas yra radioaktyvus
sąsaja IBanana extends IRadioactive {
  ilgis: skaičius;
  spalva: string;
}

// Apibrėžti kažką, kas nėra radioaktyvus
sąsaja IDog {
  weight: skaičius;
}

// Apibrėžkite konteinerio, kuriame gali būti tik radioaktyvūs daiktai, sąsają
sąsaja IRadioactiveContainer {
  add(thing: T): void;
  getRadioactiveness(): skaičius;
}

// Apibrėžti klasę, įgyvendinančią radioaktyvaus konteinerio sąsają
Klasė Radioaktyvus konteineris implements IRadioactiveContainer {
  private stuff: T[] = [];

  add(thing: T): void {
    this.stuff.push(thing);
  }

  getRadioactiveness(): number {
      return this.stuff.reduce((a, b) => a + b.jonizingRadiation, 0)
  }
}

// KLAIDA! Tipas 'IDog' neatitinka apribojimo 'IRadioactive
// Ir gana žiauru laikyti šunis radioaktyviajame konteineryje
const dogsContainer = new RadioactiveContainer();

// Viskas gerai!
const radioactiveContainer = new RadioactiveContainer();

// Nepamirškite rūšiuoti radioaktyviųjų atliekų - sukurkite atskirą šiukšliadėžę tik bananams
const bananasContainer = new RadioactiveContainer();

Tai viskas, žmonės!

Susiję straipsniai

Išmaniojo telefono sveikatos priežiūros programėlės su širdies piktograma ir kylančia sveikatos diagrama, pažymėtos The Codest logotipu, iliustracija, vaizduojanti skaitmeninės sveikatos ir sveikatos technologijų sprendimus.
Programinės įrangos kūrimas

Sveikatos priežiūros programinė įranga: Sveikatos priežiūros paslaugos: tipai, naudojimo atvejai

Įrankiai, kuriais šiandien naudojasi sveikatos priežiūros organizacijos, nė iš tolo neprimena prieš kelis dešimtmečius naudotų popierinių kortelių. sveikatos priežiūros programinė įranga dabar padeda sveikatos sistemoms, pacientų priežiūrai ir šiuolaikiniam sveikatos priežiūros paslaugų teikimui klinikinėse ir...

GERIAUSIAS
Abstrakti mažėjančios stulpelinės diagramos su kylančia rodykle ir auksine moneta, simbolizuojančia ekonomiškumą arba taupymą, iliustracija. Viršutiniame kairiajame viršutiniame kampe pavaizduotas The Codest logotipas ir šūkis "In Code We Trust" šviesiai pilkame fone.
Programinės įrangos kūrimas

Kaip padidinti savo Dev komandą neprarandant produkto kokybės

Didinate savo kūrėjų komandą? Sužinokite, kaip augti neprarandant produkto kokybės. Šiame vadove aptariami ženklai, kad atėjo laikas didinti komandą, komandos struktūra, įdarbinimas, vadovavimas ir įrankiai - ir kaip The Codest gali...

GERIAUSIAS
Programinės įrangos kūrimas

Sukurkite ateičiai atsparias žiniatinklio programas: The Codest ekspertų komandos įžvalgos

Sužinokite, kaip The Codest puikiai kuria keičiamo dydžio interaktyvias žiniatinklio programas, naudodama pažangiausias technologijas ir užtikrindama vientisą naudotojų patirtį visose platformose. Sužinokite, kaip mūsų patirtis skatina skaitmeninę transformaciją ir verslo...

GERIAUSIAS
Programinės įrangos kūrimas

10 geriausių Latvijoje įsikūrusių programinės įrangos kūrimo įmonių

Naujausiame mūsų straipsnyje sužinokite apie geriausias Latvijos programinės įrangos kūrimo įmones ir jų inovatyvius sprendimus. Sužinokite, kaip šie technologijų lyderiai gali padėti pakelti jūsų verslo lygį.

thecodest
Įmonių ir didinimo sprendimai

"Java" programinės įrangos kūrimo pagrindai: A Guide to outsourcing Outsourcing Successfully

Išnagrinėkite šį esminį vadovą, kaip sėkmingai outsourcing "Java" programinę įrangą kurti, kad padidintumėte efektyvumą, įgytumėte patirties ir sėkmingai įgyvendintumėte projektus su The Codest.

thecodest

Prenumeruokite mūsų žinių bazę ir būkite nuolat informuoti apie IT sektoriaus patirtį.

    Apie mus

    The Codest - tarptautinė programinės įrangos kūrimo bendrovė, turinti technologijų centrus Lenkijoje.

    Jungtinė Karalystė - būstinė

    • 303B biuras, 182-184 High Street North E6 2JA
      Londonas, Anglija

    Lenkija - vietiniai technologijų centrai

    • Fabryczna biurų parkas, Aleja
      Pokoju 18, 31-564 Krokuva
    • Brain Embassy, Konstruktorska
      11, 02-673 Varšuva, Lenkija

    The Codest

    • Pagrindinis
    • Apie mus
    • Paslaugos
    • Case Studies
    • Sužinokite, kaip
    • Karjera
    • Žodynas

    Paslaugos

    • Patariamoji tarnyba
    • Programinės įrangos kūrimas
    • Galinės dalies kūrimas
    • Priekinės dalies kūrimas
    • Staff Augmentation
    • Atgalinės versijos kūrėjai
    • Debesų inžinieriai
    • Duomenų inžinieriai
    • Kita
    • QA inžinieriai

    Ištekliai

    • Faktai ir mitai apie bendradarbiavimą su išoriniu programinės įrangos kūrimo partneriu
    • Iš JAV į Europą: Kodėl Amerikos startuoliai nusprendžia persikelti į Europą?
    • Technikos plėtros centrų užsienyje palyginimas: Tech Offshore Europa (Lenkija), ASEAN (Filipinai), Eurazija (Turkija)
    • Kokie yra svarbiausi CTO ir CIO iššūkiai?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Autorinės teisės © 2026 The Codest. Visos teisės saugomos.

    lt_LTLithuanian
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian es_ESSpanish nl_NLDutch etEstonian elGreek pt_PTPortuguese cs_CZCzech lvLatvian is_ISIcelandic lt_LTLithuanian