✅ WEB ja WordPressi uudised, teemad, pistikprogrammid. Siin jagame näpunäiteid ja parimaid veebisaidi lahendusi.

TypeScript: valitud atribuudid on valikulised funktsiooniga Partial & Omit

8

Kui kasutate utiliidi Partialtüübi puhul, muudab see kõik tüübi atribuudid valikuliseks. Vaatame, kuidas saame selle utiliidi koostada teise utiliidiga Omit, et muuta valikuliseks ainult teatud seda tüüpi atribuudid. Lõpuks loome utiliidi tüübi, kasutades TypeScripti üldisi tegureid, et rakendada seda mis tahes soovitud tüübi puhul.

Muutke kõik tüübi atribuudid valikuliseks

UtiliididPartial ja on TypeScripti valdkonnas Omithästi tuntud, kuna need on väga mugavad nende kiireks tüübile rakendamiseks ja põhimõtteliselt uue tüübi hankimiseks. teisendab kõik teatud tüüpi klahvid valikulisteks. Kui teil on näiteks seda tüüpi:Partial<T>

interface Band { lead: string guitar: string bass: string drums: string keyboard: string }

kõik omadused on nõutavad, kui millelgi on seda tüüpi. Kui soovite määrata sellise objekti:

const FooFighters: Band = { lead: 'Dave Grohl', guitar: 'Pat Smears', bass: 'Nate Mendel', drums: 'Taylor Williams', }

see ebaõnnestub, kuna sellel on keyboardvara puudu. Nüüd võiksime selle atribuudi märkida valikuliseks ja TypeScript võimaldab meil seda hõlpsalt teha. Kõige lihtsam viis seda teha on lisada selle nimele küsimärk. Sel juhul, kui algset tüüpi on võimalik redigeerida, saate selle juurde minna ja seda järgmiselt muuta:

interface Band { lead: string guitar: string bass: string drums: string keyboard?: string }

Suurepärane. Nüüd õnnestub eelmine ülesanne, sest keyboardseda pole enam vaja. Aga mis siis, kui algset tüüpi pole mingil põhjusel võimalik muuta? Mida saate sellistel juhtudel kiiresti teha, on taotleda Partialseda tüüpi:

type NotAllTheBand = Partial const FooFighters: NotAllTheBand = { lead: 'Dave Grohl', guitar: 'Pat Smears', bass: 'Nate Mendel', drums: 'Taylor Williams', }

See peatab kõigi omaduste jõustamise, muutes need kõik valikuliseks. Võib-olla mõnikord tahame seda, aga mis siis, kui tahame teha ainult ühe atribuudi valikuliseks ja vältida algse tüübi muutmist?

Atribuutide eemaldamine tüübist

Enne selle juurde asumist ja selle toimimise vaatamist vaatame veel üht utiliiti, mis meid selles aitab: Omit. See utiliiditüüp eemaldab atribuudid tüübilt, kus see on rakendatud. Kuigi Partialsee ei võta muid argumente peale tüübi, Omitvõtab tüübi ja atribuudid, mida soovite eemaldada: Omit<T, K>.

See ei Partialmuuda need valikuliseks: Omitkustutab need tüübist täielikult. Kui kasutate Partial<Band>, on see nii, nagu oleksite seda teinud:

interface Band { lead?: string guitar?: string bass?: string drums?: string keyboard?: string }

Kui aga kasutate Omit<Band, 'keyboard'>, siis tundub, nagu oleksite seda teinud:

interface Band { lead: string guitar: string bass: string drums: string }

See hakkab nüüd aru saama, eks? Kas kujutate ette, mida saaksime TypeScriptis teha, kui meil on tüüp, mille kõik algse atribuudid on seatud valikuliseks, ja teine ​​tüüp, millel on ainult need omadused, mida me tahame nõuda? Kui vaid oleks võimalus… neid tüüpe ristuda, eks?

Ristuvad tüübid

Jah, TypeScriptis saab kasutada ampersandi &, tüübi ristmiku operaatorit. See operaator, arvestades kahte tüüpi, konstrueerib uue, millel on omadused, mis kuuluvad mõlemasse tüüpi:

interface SomeType { propA: string propB: number } interface AnotherType { propC: boolean propD: Array } type IntersectedType = SomeType & AnotherType

Nüüdseks olete ilmselt sellest aru saanud: ristame osalise tüübi ja tüübi, kust eemaldasime mõned selle omadused.

Muuda tüübi valitud atribuudid valikuliseks

Proovime seda mõtestada. TypeScripti õppimisel on oluline mõista, mis meie tüüpidega toimub.

Haarame tüübi, mille kõik omadused on määratud valikuliseks tänu sellele, et Partialsee on rakendatud. Järgmisena ristame selle tüübiga, mille atribuudid on eemaldanud Omit. Vaatame näidet:

interface SomeType { propA: string propB: number } type OptionalPropB = Partial & Omit

Meil on nüüd uus tüüp, ilma algset tüüpi muutmata, mis näeb välja järgmine:

type OptionalPropB = { propA: string propB?: string }

See juhtub seetõttu, et me haarame omadusi propA?ja propB?tüübi poolt toodetud tüübilt Partialning lõikuvad need propAtüübi poolt toodetud tüübiga Omit.

TypeScripti üldised utiliidid

Ok, nüüd töötab meie uus tüüp ja meil saab olla ainult valitud atribuudid, mis on märgitud valikuliseks, ilma algset tüüpi muutmata. Siiski see rida

type OptionalPropB = Partial & Omit

On liiga paljusõnaline, iga kord kirjutamiseks üsna kole ja tüütu. Veelgi olulisem on see, et see ei tööta erineva tüübi puhul, me peame selle iga kord uuesti kirjutama. Kas me saame selle lühemaks ja ilusamaks muuta ning mis tahes tüüpi jaoks toimima panna? Jah, TypeScript võimaldab meil siin kasutada üldisi ja luua oma utiliidi tüüp:

type Optional = Partial & Omit

Ja nüüd on meil oma TypeScripti utiliiditüüp, mis on juurutatud geneeriliste andmetega, mida saame kasutada valitud tüübi atribuudid mis tahes tüübi puhul valikuliseks muutmiseks. Saame seda kasutada järgmiselt:

type TypeWithOptionalProp = Optional

Märkate, et allkiri sarnaneb väljajätmisega: see utiliit võtab tüübi, millega töötada, ja atribuudid, mis muudetakse valikuliseks. Kui teil on rohkem, võite kasutada ametiühingu operaatorit:

type TypeWithOptionalProps = Optional

Lõpusõnad

Nüüd saate selle üldise utiliidi tüübi faili salvestada ja eksportida, et kasutada seda kogu rakenduses. Siin on link TypeScripti mänguväljakule, kuhu lisasin selle artikli koodi ja kommenteerisin seda, et saaksite näha, mis toimub, vaadates Partial, Omitja meie üldist utiliidi tüüpi.

Geneeriliste ravimite ja utiliitide maailm on TypeScriptis fantastiline. Astuge sellesse ja hakake katsetama!

See veebisait kasutab teie kasutuskogemuse parandamiseks küpsiseid. Eeldame, et olete sellega rahul, kuid saate soovi korral loobuda. Nõustu Loe rohkem