(function(w,d,s,l,i){w[l]=w[l]|||[];w[l].push({'gtm.start': new Date().getTime(),event:'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 vispārīgie nosaukumi
The Codest
  • Par mums
  • Pakalpojumi
    • Programmatūras izstrāde
      • Frontend izveide
      • Backend izstrāde
    • Staff Augmentation
      • Frontend izstrādātāji
      • Backend izstrādātāji
      • Datu inženieri
      • Mākoņa inženieri
      • QA inženieri
      • Citi
    • Tā Konsultatīvais dienests
      • Audits un konsultācijas
  • Nozares
    • Fintech un banku darbība
    • E-commerce
    • Adtech
    • Healthtech
    • Ražošana
    • Loģistika
    • Automobiļu nozare
    • IOT
  • Vērtība par
    • CEO
    • CTO
    • Piegādes vadītājs
  • Mūsu komanda
  • Case Studies
  • Zināt, kā
    • Blogs
    • Tikšanās
    • Tiešsaistes semināri
    • Resursi
Karjera Sazinieties ar mums
  • Par mums
  • Pakalpojumi
    • Programmatūras izstrāde
      • Frontend izveide
      • Backend izstrāde
    • Staff Augmentation
      • Frontend izstrādātāji
      • Backend izstrādātāji
      • Datu inženieri
      • Mākoņa inženieri
      • QA inženieri
      • Citi
    • Tā Konsultatīvais dienests
      • Audits un konsultācijas
  • Vērtība par
    • CEO
    • CTO
    • Piegādes vadītājs
  • Mūsu komanda
  • Case Studies
  • Zināt, kā
    • Blogs
    • Tikšanās
    • Tiešsaistes semināri
    • Resursi
Karjera Sazinieties ar mums
Atpakaļ bultiņa ATGRIEZTIES ATPAKAĻ
2020-07-13
Programmatūras izstrāde

TypeScript vispārīgie nosaukumi

Mateusz Staniuk

Ģenerikas nodrošina atkārtoti lietojamus koda fragmentus, kas darbojas ar vairākiem tipiem, nevis tikai ar vienu tipu. Ģenerikas nodrošina veidu, kā uzskatīt tipu par mainīgo un norādīt to lietošanas laikā, līdzīgi kā funkciju parametrus.

Ģenerikas var izmantot kopā ar funkcijām (izveidojot ģenerisku funkciju), klasēm (izveidojot ģenerisku klasi) un saskarnēm (izveidojot ģenerisku saskarni).

Pamata lietošana

Iespējams, ka agrāk esat izmantojuši ģenēriskos kodus, pat to nezinot - visbiežāk ģenēriskie kodi tiek izmantoti, deklarējot masīvu:

const myArray: string[];

No pirmā acu uzmetiena tas nav pārāk īpašs, mēs tikai paziņojam. myArray kā virkņu masīvu, bet tas ir tas pats, kas vispārīgā deklarācija:

const myArray: masīvs;

Viennozīmīgu lietu saglabāšana

Sāksim ar ļoti vienkāršu piemēru - kā mēs varētu pārnest šo vaniļas JS funkciju, lai TypeScript:

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

Šī funkcija atgriezīs masīvu, kas piepildīts ar norādīto daudzumu pildviela, tāpēc garums būs numurs un visa funkcija atgriezīs masīvu pildviela - bet kas ir pildviela? Šobrīd tas var būt jebkas, tāpēc viena no iespējām ir izmantot jebkurš:

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

Izmantojot jebkurš noteikti ir vispārīgs - mēs varam nodot burtiski jebko, tāpēc definīcija “strādāt ar vairākiem tipiem, nevis ar vienu tipu” ir pilnībā ietverta, bet mēs zaudējam saikni starp pildviela tips un atgriešanas tips. Šajā gadījumā mēs vēlamies atgriezt kādu kopīgu lietu, un mēs varam skaidri definēt šo kopīgo lietu kā tipa parametrs:

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

un izmantot šādi:

const prefilledArray = getPrefiledArray(0, 10);

Vispārīgi ierobežojumi

Aplūkosim citus, iespējams, biežāk sastopamus gadījumus. Kāpēc mēs patiesībā izmantojam tipus funkcijās? Man tas ir, lai nodrošinātu, ka funkcijai nodotajiem argumentiem būs kādas īpašības, ar kurām es vēlos mijiedarboties.

Vēlreiz mēģināsim pārnest vienkāršu vaniļas JS funkciju uz TS.

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

Mums ir netriviāla mīkla - kā nodrošināt, ka lieta ir garums īpašumu, un pirmā doma var būt, ka jādara kaut kas līdzīgs:

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

un atkarībā no konteksta tas varētu būt pareizi, kopumā mēs esam mazliet vispārīgi - tas darbosies ar vairāku tipu masīviem, bet ko darīt, ja mēs īsti nezinām, vai lietai vienmēr jābūt masīvam - varbūt lieta ir futbola laukums vai banāna miziņa? Šādā gadījumā mums ir jāapkopo šīs lietas kopīgās īpašības tādā konstrukcijā, kas var definēt objekta īpašības - interfeisā:

interfeiss IThingWithLength {
  garums: skaitlis;
}

Mēs varam izmantot IThingWithLength interfeiss kā tips lieta parametrs:

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

šajā vienkāršajā piemērā tas būs pilnīgi kārtībā, bet, ja mēs vēlamies, lai šis tips būtu vispārīgs un nerastos pirmajā piemērā minētā problēma, mēs varam izmantot Vispārīgi ierobežojumi:

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

un izmantot to:

interfeiss IBananaPeel {
  biezums: skaits;
  garums: skaits;
}

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

Izmantojot paplašina nodrošina, ka T saturēs īpašības, kas definētas ar IThingWithLength.

Vispārīgās klases

Līdz šim mēs strādājām ar vispārīgajām funkcijām, bet tā nav vienīgā vieta, kur vispārīgās funkcijas spīd, tāpēc paskatīsimies, kā mēs varam tās iekļaut klasēs.

Vispirms mēģināsim banānu grozā uzglabāt banānu ķekarus:

klase Banāns {
  konstruktors(
    public length: numurs,
    public color: string,
    public ionizingRadiation: number
  ) {}
}

klase 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));

Tagad mēģināsim izveidot vispārējas nozīmes grozu, lai dažādas lietas ar to pašu tipu:

klase Grozs {
  private stuff: T[] = [];

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

const bananaBasket = new Basket();

Un visbeidzot, pieņemsim, ka mūsu grozs ir radioaktīvo materiālu konteiners un mēs varam uzglabāt tikai tādas vielas, kurām ir. jonizējošā radiācija īpašums:

interfeiss IRadioactive {
  ionizingRadiation: skaits;
}

klase RadioactiveContainer {
  private stuff: T[] = [];

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

Vispārīgā saskarne

Visbeidzot, mēģināsim apkopot visas savas zināšanas un izveidot radioaktīvo impēriju, izmantojot arī vispārīgās saskarnes:

// Definēt konteineru kopīgos atribūtus
interfeiss IRadioactive {
  ionizingRadiation: number;
}


// Definē kaut ko, kas ir radioaktīvs
interfeiss IBanana extends IRadioactive {
  garums: skaits;
  color: string;
}

// Definē kaut ko, kas nav radioaktīvs
Interfeiss IDog {
  weight: skaitlis;
}

// Definē interfeisu konteineram, kurā var glabāt tikai radioaktīvas lietas
interfeiss IRadioactiveContainer {
  add(thing: T): void;
  getRadioactiveness():number;
}

// Definēt klasi, kas īsteno radioaktīvā konteinera saskarni
klase RadioactiveContainer implements IRadioactiveContainer {
  private stuff: T[] = [];

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

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

// KĻŪDA! Tips 'IDog' neatbilst ierobežojumam 'IRadioactive'
// Un ir diezgan brutāli glabāt suņus radioaktīvā konteinerā.
const dogsContainer = new RadioactiveContainer();

// All good fam!
const radioactiveContainer = new RadioactiveContainer();

// Neaizmirstiet šķirot radioaktīvos atkritumus - izveidojiet atsevišķu tvertni tikai banāniem.
const bananasContainer = new RadioactiveContainer();

Tas ir viss, draugi!

Saistītie raksti

Ilustrācija viedtālruņa veselības aprūpes lietotnei ar sirds ikonu un pieaugošo veselības diagrammu, kas apzīmēta ar The Codest logotipu, kurš pārstāv digitālās veselības un HealthTech risinājumus.
Programmatūras izstrāde

Veselības aprūpes programmatūra: Mārketinga programmatūra: veidi, izmantošanas gadījumi

Šodien veselības aprūpes organizāciju rīcībā esošie rīki vairs neatgādina papīra diagrammas, kas tika izmantotas pirms vairākiem gadu desmitiem. veselības aprūpes programmatūra tagad atbalsta veselības aprūpes sistēmas, pacientu aprūpi un mūsdienīgu veselības aprūpes sniegšanu klīniskajās un...

TĀKĀDĒJAIS
Abstrakta ilustrācija ar lejupejošu joslu diagrammu ar augošu bultiņu un zelta monētu, kas simbolizē izmaksu efektivitāti vai ietaupījumus. Augšējā kreisajā stūrī redzams The Codest logotips ar saukli "In Code We Trust" uz gaiši pelēka fona.
Programmatūras izstrāde

Kā paplašināt izstrādātāju komandu, nezaudējot produkta kvalitāti

Palielināt izstrādātāju komandu? Uzziniet, kā augt, nezaudējot produkta kvalitāti. Šajā rokasgrāmatā aplūkotas pazīmes, kas liecina, ka ir pienācis laiks paplašināt komandu, komandas struktūra, pieņemšana darbā, vadība un rīki, kā arī tas, kā The Codest var...

TĀKĀDĒJAIS
Programmatūras izstrāde

Uz nākotni noturīgu tīmekļa lietojumprogrammu veidošana: The Codest ekspertu komandas ieskats

Uzziniet, kā The Codest izceļas mērogojamu, interaktīvu tīmekļa lietojumprogrammu izveidē, izmantojot modernākās tehnoloģijas un nodrošinot viengabalainu lietotāja pieredzi visās platformās. Uzziniet, kā mūsu zināšanas veicina digitālo transformāciju un biznesa...

TĀKĀDĒJAIS
Programmatūras izstrāde

Top 10 Latvijā bāzēti programmatūras izstrādes uzņēmumi

Mūsu jaunākajā rakstā uzziniet vairāk par Latvijas labākajiem programmatūras izstrādes uzņēmumiem un to inovatīvajiem risinājumiem. Uzziniet, kā šie tehnoloģiju līderi var palīdzēt uzlabot jūsu biznesu.

thecodest
Uzņēmumu un mērogošanas risinājumi

Java programmatūras izstrādes pamati: A Guide to Outsourcing Successfully

Izpētiet šo būtisko rokasgrāmatu par veiksmīgu outsourcing Java programmatūras izstrādi, lai uzlabotu efektivitāti, piekļūtu speciālajām zināšanām un sekmīgi īstenotu projektus ar The Codest.

thecodest

Abonējiet mūsu zināšanu bāzi un saņemiet jaunāko informāciju par IT nozares pieredzi.

    Par mums

    The Codest - starptautisks programmatūras izstrādes uzņēmums ar tehnoloģiju centriem Polijā.

    Apvienotā Karaliste - Galvenā mītne

    • 303B birojs, 182-184 High Street North E6 2JA
      Londona, Anglija

    Polija - Vietējie tehnoloģiju centri

    • Fabryczna Office Park, Aleja
      Pokoju 18, 31-564 Krakova
    • Brain Embassy, Konstruktorska
      11, 02-673 Varšava, Polija

    The Codest

    • Sākums
    • Par mums
    • Pakalpojumi
    • Case Studies
    • Zināt, kā
    • Karjera
    • Vārdnīca

    Pakalpojumi

    • Tā Konsultatīvais dienests
    • Programmatūras izstrāde
    • Backend izstrāde
    • Frontend izveide
    • Staff Augmentation
    • Backend izstrādātāji
    • Mākoņa inženieri
    • Datu inženieri
    • Citi
    • QA inženieri

    Resursi

    • Fakti un mīti par sadarbību ar ārējo programmatūras izstrādes partneri
    • No ASV uz Eiropu: Kāpēc Amerikas jaunuzņēmumi nolemj pārcelties uz Eiropu?
    • Tehnoloģiju ārzonas attīstības centru salīdzinājums: Tech Offshore Eiropa (Polija), ASEAN (Filipīnas), Eirāzija (Turcija)
    • Kādi ir galvenie CTO un CIO izaicinājumi?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Autortiesības © 2026 The Codest. Visas tiesības aizsargātas.

    lvLatvian
    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 lt_LTLithuanian is_ISIcelandic lvLatvian