DeepPartial ja DeepReadonly
Rakentakaa rekursiiviset versiot Partial- ja Readonly-tyypeistä
DeepPartial ja DeepReadonly on ilmainen TypeScript Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu TypeScript Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. TypeScript Academy-kurssilla on yhteensä 4 oppituntia.
Miksi syviä utility-tyyppejä tarvitaan
Sisäänrakennetut Partial- ja Readonly-tyypit koskevat vain yhtä tasoa. Sisäkkäisiä objekteja varten tarvitaan rekursiiviset versiot.
interface Config {
db: { host: string; port: number };
app: { name: string };
}
type Shallow = Partial<Config>;
// Shallow.db is still required — only top level is optionalDeepPartialin toteuttaminen
Käykää objektin ominaisuudet rekursiivisesti läpi ja tehkää jokaisesta valinnainen. Käyttäkää DeepPartial-tyyppiä rekursiivisesti, jos ominaisuuden arvo on objekti.
type DeepPartial<T> = T extends object
? { [K in keyof T]?: DeepPartial<T[K]> }
: T;DeepPartial käytännössä
Soveltakaa DeepPartial-tyyppiä sisäkkäiseen konfiguraatiotyyppiin ja tarkastelkaa, kuinka kaikki tasot muuttuvat valinnaisiksi.
type PartialConfig = DeepPartial<Config>;
// PartialConfig.db?: { host?: string; port?: number }
const c: PartialConfig = { db: { host: "localhost" } };
// No error — all other fields are optionalDeepReadOnlyn toteuttaminen
Tehkää jokaisesta ominaisuudesta kaikilla syvyystasoilla readonly rekursiivisesti sisäkkäisiin objektityyppeihin siirtymällä.
type DeepReadonly<T> = T extends object
? { readonly [K in keyof T]: DeepReadonly<T[K]> }
: T;DeepReadonly käytännössä
Syvästi jäädytettyä konfiguraatiota ei voi muuttaa millään tasolla.
type ReadonlyConfig = DeepReadonly<Config>;
const cfg: ReadonlyConfig = { db: { host: "localhost", port: 5432 }, app: { name: "my-app" } };
// cfg.db.port = 3000; // Error: readonlyTaulukoiden käsitteleminen syvissä tyypeissä
Taulukot tarvitsevat erityiskäsittelyä: kartoittakaa alkiotyypit rekursiivisesti sen sijaan, että käsittelisitte taulukoita tavallisina objekteina.
type DeepPartial<T> =
T extends (infer U)[]
? DeepPartial<U>[]
: T extends object
? { [K in keyof T]?: DeepPartial<T[K]> }
: T;Primitiiivityyppien käsitteleminen
Rekursion perustapauksen on palautettava primitiivityypit sellaisinaan, eikä niitä pidä kääriä objektin mapattuun tyyppiin.
type DeepReadonly<T> =
T extends string | number | boolean | null | undefined ? T
: T extends (infer U)[] ? ReadonlyArray<DeepReadonly<U>>
: { readonly [K in keyof T]: DeepReadonly<T[K]> };DeepPartialin ja DeepReadOnlyn yhdistäminen
Voitte yhdistää ne luodaksenne syvästi osittaisen ja vain luku -tyypin turvallisia konfiguraatiokorjauksia varten.
type SafePatch<T> = DeepReadonly<DeepPartial<T>>;Suorituskykynäkökohdat
Hyvin suurten objektien rekursiiviset tyypit voivat hidastaa TypeScriptin tyyppitarkistusta. Suorituskykykriittisessä koodissa kannattaa harkita syvyysrajoja tai laiskaa evaluointia.
// For very deep schemas, consider using Zod or io-ts
// which provide runtime + compile-time deep typingKäytännön käyttö: React-tilan korjausobjektit
DeepPartial sopii erinomaisesti tilan korjausfunktioihin, jotka hyväksyvät vain suuresta tilaobjektista muuttuneen osajoukon.
function patch<T>(state: T, changes: DeepPartial<T>): T {
return { ...state, ...changes } as T;
}Kertaus: Syvät utility-tyypit
DeepPartial ja DeepReadonly ovat rekursiivisia mapattuja tyyppejä, jotka soveltavat muuntajansa sisäkkäisen objektin jokaiselle tasolle. Käsitelkää taulukot erikseen ja käyttäkää primitiivityypeille perustapauksia.
Pikatarkistus
Mikä on DeepPartial-tyypin oikea rekursiivinen perustapaus?
Mitä opitte
Toteutitte DeepPartial- ja DeepReadonly-tyypit rekursiivisten mapattujen tyyppien avulla. Käsitelkää taulukot erikoistapauksena ja palauttakaa primitiivityypit perustapauksessa aina muuttamattomina.
Opi TypeScript tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 101
- Oppitunnit
- 352
Usein kysytyt kysymykset
Onko oppitunti ”DeepPartial ja DeepReadonly” ilmainen?
Kyllä – oppitunnin ”DeepPartial ja DeepReadonly” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko TypeScript Academy-kurssin, päivitä CoddyKit PROhon. TypeScript Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”DeepPartial ja DeepReadonly”?
Rakentakaa rekursiiviset versiot Partial- ja Readonly-tyypeistä Harjoittelet TypeScript Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni TypeScript Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin TypeScript Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.
Kuinka kauan ”DeepPartial ja DeepReadonly”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä TypeScript Academy-oppitunnilla?
Kyllä. Jokainen TypeScript Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- DeepPartial ja DeepReadonly
- Flatten- ja UnwrapPromise-utilityt
- TupleToUnion ja UnionToIntersection
- Tyyppiutilitykirjaston julkaiseminen