{"id":231601,"date":"2023-01-08T12:01:00","date_gmt":"2023-01-08T09:01:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231601"},"modified":"2022-12-25T19:00:45","modified_gmt":"2022-12-25T16:00:45","slug":"typescript-valitud-atribuudid-on-valikulised-funktsiooniga-partial-omit","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/typescript-valitud-atribuudid-on-valikulised-funktsiooniga-partial-omit\/","title":{"rendered":"TypeScript: valitud atribuudid on valikulised funktsiooniga Partial &#038; Omit"},"content":{"rendered":"\n<p>Kui kasutate utiliidi <code>Partial<\/code>t\u00fc\u00fcbi puhul, muudab see k\u00f5ik t\u00fc\u00fcbi atribuudid valikuliseks. Vaatame, kuidas saame selle utiliidi koostada teise utiliidiga <code>Omit<\/code>, et muuta valikuliseks ainult teatud seda t\u00fc\u00fcpi atribuudid. L\u00f5puks loome utiliidi t\u00fc\u00fcbi, kasutades TypeScripti \u00fcldisi tegureid, et rakendada seda mis tahes soovitud t\u00fc\u00fcbi puhul.<\/p>\n<h2>Muutke k\u00f5ik t\u00fc\u00fcbi atribuudid valikuliseks<\/h2>\n<p><a href=\"https:\/\/startfunction.com\/tag\/typescript\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Utiliidid<\/a><code>Partial<\/code> ja on TypeScripti valdkonnas <code>Omit<\/code>h\u00e4sti tuntud, kuna need on v\u00e4ga mugavad nende kiireks t\u00fc\u00fcbile rakendamiseks ja p\u00f5him\u00f5tteliselt uue t\u00fc\u00fcbi hankimiseks. teisendab k\u00f5ik teatud t\u00fc\u00fcpi klahvid valikulisteks. Kui teil on n\u00e4iteks seda t\u00fc\u00fcpi:<a href=\"https:\/\/startfunction.com\/tag\/typescript\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external\"><\/a><code>Partial&lt;T&gt;<\/code><\/p>\n<pre><code>interface Band {\n    lead: string\n    guitar: string\n    bass: string\n    drums: string\n    keyboard: string\n}<\/code><\/pre>\n<p>k\u00f5ik omadused on n\u00f5utavad, kui millelgi on seda t\u00fc\u00fcpi. Kui soovite m\u00e4\u00e4rata sellise objekti:<\/p>\n<pre><code>const FooFighters: Band = {\n    lead: 'Dave Grohl',\n    guitar: 'Pat Smears',\n    bass: 'Nate Mendel',\n    drums: 'Taylor Williams',\n}<\/code><\/pre>\n<p>see eba\u00f5nnestub, kuna sellel on <code>keyboard<\/code>vara puudu. N\u00fc\u00fcd v\u00f5iksime selle atribuudi m\u00e4rkida valikuliseks ja TypeScript v\u00f5imaldab meil seda h\u00f5lpsalt teha. K\u00f5ige lihtsam viis seda teha on lisada selle nimele k\u00fcsim\u00e4rk. Sel juhul, kui algset t\u00fc\u00fcpi on v\u00f5imalik redigeerida, saate selle juurde minna ja seda j\u00e4rgmiselt muuta:<\/p>\n<pre><code>interface Band {\n    lead: string\n    guitar: string\n    bass: string\n    drums: string\n    keyboard?: string\n}<\/code><\/pre>\n<p>Suurep\u00e4rane. N\u00fc\u00fcd \u00f5nnestub eelmine \u00fclesanne, sest <code>keyboard<\/code>seda pole enam vaja. Aga mis siis, kui algset t\u00fc\u00fcpi pole mingil p\u00f5hjusel v\u00f5imalik muuta? Mida saate sellistel juhtudel kiiresti teha, on taotleda <code>Partial<\/code>seda t\u00fc\u00fcpi:<\/p>\n<pre><code>type NotAllTheBand = Partial\n\nconst FooFighters: NotAllTheBand = {\n    lead: 'Dave Grohl',\n    guitar: 'Pat Smears',\n    bass: 'Nate Mendel',\n    drums: 'Taylor Williams',\n}<\/code><\/pre>\n<p>See peatab k\u00f5igi omaduste j\u00f5ustamise, muutes need k\u00f5ik valikuliseks. V\u00f5ib-olla m\u00f5nikord tahame seda, aga mis siis, kui tahame teha ainult \u00fche atribuudi valikuliseks ja v\u00e4ltida algse t\u00fc\u00fcbi muutmist?<\/p>\n<h2>Atribuutide eemaldamine t\u00fc\u00fcbist<\/h2>\n<p>Enne selle juurde asumist ja selle toimimise vaatamist vaatame veel \u00fcht utiliiti, mis meid selles aitab: <code>Omit<\/code>. See utiliidit\u00fc\u00fcp eemaldab atribuudid t\u00fc\u00fcbilt, kus see on rakendatud. Kuigi <code>Partial<\/code>see ei v\u00f5ta muid argumente peale t\u00fc\u00fcbi, <code>Omit<\/code>v\u00f5tab t\u00fc\u00fcbi ja atribuudid, mida soovite eemaldada: <code>Omit&lt;T, K&gt;<\/code>.<\/p>\n<p>See ei <code>Partial<\/code>muuda need valikuliseks: <code>Omit<\/code>kustutab need t\u00fc\u00fcbist t\u00e4ielikult. Kui kasutate <code>Partial&lt;Band&gt;<\/code>, on see nii, nagu oleksite seda teinud:<\/p>\n<pre><code>interface Band {\n    lead?: string\n    guitar?: string\n    bass?: string\n    drums?: string\n    keyboard?: string\n}<\/code><\/pre>\n<p>Kui aga kasutate <code>Omit&lt;Band, 'keyboard'&gt;<\/code>, siis tundub, nagu oleksite seda teinud:<\/p>\n<pre><code>interface Band {\n    lead: string\n    guitar: string\n    bass: string\n    drums: string\n}<\/code><\/pre>\n<p>See hakkab n\u00fc\u00fcd aru saama, eks? Kas kujutate ette, mida saaksime TypeScriptis teha, kui meil on t\u00fc\u00fcp, mille k\u00f5ik algse atribuudid on seatud valikuliseks, ja teine \u200b\u200bt\u00fc\u00fcp, millel on ainult need omadused, mida me tahame n\u00f5uda? Kui vaid oleks v\u00f5imalus\u2026 neid t\u00fc\u00fcpe ristuda, eks?<\/p>\n<h2>Ristuvad t\u00fc\u00fcbid<\/h2>\n<p>Jah, TypeScriptis saab kasutada ampersandi <code>&amp;<\/code>, t\u00fc\u00fcbi ristmiku operaatorit. See operaator, arvestades kahte t\u00fc\u00fcpi, konstrueerib uue, millel on omadused, mis kuuluvad m\u00f5lemasse t\u00fc\u00fcpi:<\/p>\n<pre><code>interface SomeType {\n    propA: string\n    propB: number\n}\n\ninterface AnotherType {\n    propC: boolean\n    propD: Array\n}\n\ntype IntersectedType = SomeType &amp; AnotherType\n<\/code><\/pre>\n<p>N\u00fc\u00fcdseks olete ilmselt sellest aru saanud: ristame osalise t\u00fc\u00fcbi ja t\u00fc\u00fcbi, kust eemaldasime m\u00f5ned selle omadused.<\/p>\n<h2>Muuda t\u00fc\u00fcbi valitud atribuudid valikuliseks<\/h2>\n<p>Proovime seda m\u00f5testada. TypeScripti \u00f5ppimisel on oluline m\u00f5ista, mis meie t\u00fc\u00fcpidega toimub.<\/p>\n<p>Haarame t\u00fc\u00fcbi, mille k\u00f5ik omadused on m\u00e4\u00e4ratud valikuliseks t\u00e4nu sellele, et <code>Partial<\/code>see on rakendatud. J\u00e4rgmisena ristame selle t\u00fc\u00fcbiga, mille atribuudid on eemaldanud <code>Omit<\/code>. Vaatame n\u00e4idet:<\/p>\n<pre><code>interface SomeType {\n    propA: string\n    propB: number\n}\n\ntype OptionalPropB = Partial &amp; Omit<\/code><\/pre>\n<p>Meil on n\u00fc\u00fcd uus t\u00fc\u00fcp, ilma algset t\u00fc\u00fcpi muutmata, mis n\u00e4eb v\u00e4lja j\u00e4rgmine:<\/p>\n<pre><code>type OptionalPropB = {\n    propA: string\n    propB?: string\n}<\/code><\/pre>\n<p>See juhtub seet\u00f5ttu, et me haarame omadusi <code>propA?<\/code>ja <code>propB?<\/code>t\u00fc\u00fcbi poolt toodetud t\u00fc\u00fcbilt <code>Partial<\/code>ning l\u00f5ikuvad need <code>propA<\/code>t\u00fc\u00fcbi poolt toodetud t\u00fc\u00fcbiga <code>Omit<\/code>.<\/p>\n<h2>TypeScripti \u00fcldised utiliidid<\/h2>\n<p>Ok, n\u00fc\u00fcd t\u00f6\u00f6tab meie uus t\u00fc\u00fcp ja meil saab olla ainult valitud atribuudid, mis on m\u00e4rgitud valikuliseks, ilma algset t\u00fc\u00fcpi muutmata. Siiski see rida<\/p>\n<pre><code>type OptionalPropB = Partial &amp; Omit<\/code><\/pre>\n<p>On liiga paljus\u00f5naline, iga kord kirjutamiseks \u00fcsna kole ja t\u00fc\u00fctu. Veelgi olulisem on see, et see ei t\u00f6\u00f6ta erineva t\u00fc\u00fcbi puhul, me peame selle iga kord uuesti kirjutama. Kas me saame selle l\u00fchemaks ja ilusamaks muuta ning mis tahes t\u00fc\u00fcpi jaoks toimima panna? Jah, TypeScript v\u00f5imaldab meil siin kasutada \u00fcldisi ja luua oma utiliidi t\u00fc\u00fcp:<\/p>\n<pre><code>type Optional = Partial &amp; Omit<\/code><\/pre>\n<p>Ja n\u00fc\u00fcd on meil oma TypeScripti utiliidit\u00fc\u00fcp, mis on juurutatud geneeriliste andmetega, mida saame kasutada valitud t\u00fc\u00fcbi atribuudid mis tahes t\u00fc\u00fcbi puhul valikuliseks muutmiseks. Saame seda kasutada j\u00e4rgmiselt:<\/p>\n<pre><code>type TypeWithOptionalProp = Optional<\/code><\/pre>\n<p>M\u00e4rkate, et allkiri sarnaneb v\u00e4ljaj\u00e4tmisega: see utiliit v\u00f5tab t\u00fc\u00fcbi, millega t\u00f6\u00f6tada, ja atribuudid, mis muudetakse valikuliseks. Kui teil on rohkem, v\u00f5ite kasutada ameti\u00fchingu operaatorit:<\/p>\n<pre><code>type TypeWithOptionalProps = Optional<\/code><\/pre>\n<h2>L\u00f5pus\u00f5nad<\/h2>\n<p>N\u00fc\u00fcd saate selle \u00fcldise utiliidi t\u00fc\u00fcbi faili salvestada ja eksportida, et kasutada seda kogu rakenduses. Siin on <a href=\"https:\/\/www.typescriptlang.org\/play?#code\/JYOwLgpgTgZghgYwgAgMoHsC2EAqBPABxQG8AoZC5AqdAgQQC5kBnMKUAc3MutoCEmIAK6YARtG4VeBAMJNR6dABsIcEKQC+pUqEixEKOiHRgAFtHxFkZSlRr0mrdiC63pc5AuWr1W0mEIUAAU4KDBgOCVLFABeZBCwiKUAHgxsaIA+f0DkAHlMYDBo5Dj8wtSsXECAGmQAcmk+OqyAqwBJcGhmCARIABNiuLSqqwAyZCMTcyho7KtcgnD0EEig+z4S+NDwyIr0wIzkcbKwPZGIWob15u0AelvkHCg8ZCgITHQAN047Wjpaxq1dBQX6yWpgdDIT7QYAwF5mCB4OpvZC0JYrJQAOlICGWrGQkFYAEYmAkdlEcnEbKDGPVREohBA6tVuI0mESAEwAZhZUnsHjYjJZGgA3HcHk8XnA+n0fo0CZDoew4chCnVmK8IABHITAN59bG4kD4wlgDlME6Days+y0ur0xnMm20AVQIWaMWke6PZ6aj7fFw0gHrIEg9zgxUwlUIpEot46vUQA04vFgAkQVhcpgdPTdXpJq3U6R2h1M3mggTITk852yJiCi4e8U+qUyuXrBVQqMvNUatHAZaRbHeyV+r7tv6osP8ztK2E9sDqzUJ-WG1Pp1gAFgtiwHGLW-E2RdtTHtDLLtdd7tFzYA4gBRABy94ASm0ZMgAKo4NoAGTaOAAJoAIRzCgCzorsOC1AA0sgEAAB6QCAfQagA1oi6AwI8hxxGSSTJDghzHAUpzQcgMFZGBjyBAA6oUpgQXuqz2BqpS7oOKTDNElyNHUyAAD71O4NxehKvrSrKgbysCoIfhCXbKvC5ixig-accO4kvG8-oTvQs7dqqi4avGuqrimxppqaACsTDRPRZhMZxB4EGx1p8n8p6lk6opAA\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">link TypeScripti m\u00e4nguv\u00e4ljakule,<\/a> kuhu lisasin selle artikli koodi ja kommenteerisin seda, et saaksite n\u00e4ha, mis toimub, vaadates <code>Partial<\/code>, <code>Omit<\/code>ja meie \u00fcldist utiliidi t\u00fc\u00fcpi.<\/p>\n<p>Geneeriliste ravimite ja utiliitide maailm on TypeScriptis fantastiline. Astuge sellesse ja hakake katsetama!<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/startfunction.com\" class=\"external external_icon\">startfunction.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kasutage funktsiooni Osaline ja v\u00e4ljaj\u00e4tmine, et muuta valikuliseks ainult teatud t\u00fc\u00fcbi atribuudid.<\/p>\n","protected":false},"author":1,"featured_media":236900,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[718,749,729,894,842,863],"tags":[1165],"class_list":["post-231601","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arendaja","category-avatud-laehtekoodiga","category-javascript-4","category-kood","category-opetused","category-wordpress-4","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/231601","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/comments?post=231601"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/231601\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/236900"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=231601"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=231601"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=231601"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}