Ujidosho wa JSON-hadi-TypeScript unafanya kazi vipi
Ujidosho ni upitio mmoja juu ya mti wa JSON uliyochambuliwa. Zana inasoma kila thamani, inachagua aina ya TypeScript kwa ajili yake, kisha inaandika kiolesura kimoja kwa kila kitu ilichopata.
- Chambua sampuli ya JSON na mchanganuzi wa asili wa kivinjari na kataa ingizo lenye kasoro na kidokezo cha mstari/safu.
- Nukua aina ya TypeScript kwa kila thamani —
string,number,boolean,null, safu wima, au kitu kilichowekwa ndani. - Ipe kila kitu kilichowekwa ndani jina la kiolesura linalotokana na funguo ya mali ya mzazi wake (kwa hivyo
user.addressinakuwa kiolesura chaAddress). - Unganisha aina za vipengele katika kila safu wima ili orodha ya
{id: 1}na{id: 2, label: "x"}izalishe muungano na sehemu sahihi za hiari. - Tumia chaguzi zako (interface dhidi ya type, readonly, optional-nullable) na toa matangazo kwa mpangilio wa utegemezi ili faili itumike bila marejeleo ya mbele.
Kwa nini uzalishe aina za TypeScript kutoka JSON?
- Hitilafu nyingi za umbo zinaweza kukamatwa wakati wa utumushi ikiwa aina ya jibu imeandikwa. Kudosha kiolesura kutoka mzigo halisi kunaandika mengi yake kwa ajili yako, na hali ya `strict` hugundua sehemu ambayo nyaraka zilisahau kutaja.
- Kuoanisha violesura vilivyodoshwa na mthibitishaji wa wakati wa utekelezaji kama Zod au io-ts kunapa umbo lile lile kazi mbili: kukamilisha kiotomati kwa kihariri katika uendelezaji na 400 kwa makali wakati uzalishaji unatuma kitu kisichotarajiwa.
- Seva ya lugha ya TypeScript huonyesha sehemu tu inazojua. Ukiingiza kiolesura kilichodoshwa, kukamilisha kiotomati kunafanya kazi wakati unapoandika nukta — hakuna tena utupaji wa `as any` kwenye jibu na grep ya kuchanganyikiwa kwenye hifadhi.
- Ukiwa karibu kuandika uainishi wa OpenAPI, kiolesura kilichodoshwa ni rasimu ya kwanza ya haraka ya schema ya jibu. Bado utataka mifano iliyoandikwa kwa mkono na vikwazo, lakini majina ya mali na aina tayari ni sahihi.
Matumizi ya kawaida
Ujidosho husaidia zaidi wakati mzigo halisi upo lakini schema haipo.
- Kutyp mzigo wa webhook wa watu wengine kutoka Stripe, GitHub, au Twilio kabla ya kuandika kishiki.
- Kubuta aina kwa API ya ndani ya REST ili timu ya mbele iweze kuanza kuandika msimbo dhidi yake siku ile ile backend inaingia.
- Kuzalisha hatua ya kuanzia ya Zod, io-ts, au schema ya Valibot kutoka jibu la API lililoonwa.
Matokeo yanaonekanaje?
Kupewa hati ya sampuli ya JSON na jina la mzizi, kizalishi huzalisha mti wa violesura, kimoja kwa kila kitu kilichowekwa ndani. Kwa ingizo hapa chini na jina la mzizi User:
Bandika {"id":1,"name":"Alice","tags":["a","b"],"address":{"city":"Paris"}} na jina la mzizi User na kizalishi huzalisha:
export interface User {
id: number;
name: string;
tags: string[];
address: Address;
}
export interface Address {
city: string;
}
Angalia kwamba address ilikuzwa hadi kiolesura chake cha kuita — hiyo ndiyo matokeo yenye mpangilio wa utegemezi. JSON ile ile na mtindo wa tangazo la type badala yake ingetoa export type User = {...}; ukiwa na kitufe cha readonly kimewashwa, kila mali inapata kirekebishi cha readonly.
Chaguzi za kizalishi
Mtindo wa tangazo
Chagua interface (misamaha ya kawaida ya TypeScript kwa maumbo ya kitu) au type (inafaa ikiwa utahitaji aina zilizowekwa ramani, aina za masharti, au makutano baadaye). Zote mbili huzalisha tabia sawa wakati wa utekelezaji; chaguo ni upendeleo wa mtindo wa uandishi wa msimbo.
Sehemu hiari zinazoweza kuwa null
Wakati thamani ya sampuli ni null, aina ya sehemu inakuwa T | null. Kuwasha chaguo hili pia huongeza kirekebishi cha ? ili sehemu iwe hiari upande wa TypeScript — inafaa wakati API wakati mwingine huacha funguo kabisa badala ya kurudisha null.
Kirekebishi cha Readonly
Huambatanisha readonly kwa kila tangazo la mali ili kiolesura kilichotolewa kiFanane na modeli ya data isiyoweza kubadilishwa. Inafaa kwa vipande vya hali ya Redux, majibu ya API yaliyohifadhiwa, au popote unapotaka mkusanyiko kutambua mabadiliko ya bahati mbaya.
Je, hii inasaidia vitu vilivyowekwa ndani na safu wima?
Ndiyo. Kila kitu kilichowekwa ndani kinakuwa kiolesura cha kuita kinachotokana na funguo ya mali ya mzazi wake, na safu wima hudosha aina ya kipengele kutoka maudhui yake. Safu wima za vitu hupata kiolesura kwa kila umbo la kitu, na aina za muungano pale ambapo maumbo hayapatani.
Sehemu za hiari zinavyodoshwa vipi?
Washa kitufe cha "Alama sehemu zinazoweza kuwa null kama hiari" na sehemu yoyote ambayo thamani yake ya sampuli ni null inapata kirekebishi cha ? kwenye funguo pamoja na | null katika aina. Bila kitufe, sehemu inabaki inahitajika na aina ni tu T | null.
Je, hii inasaidia muungano tofauti?
Aina za msingi za muungano zinaonekana wakati safu wima ina vipengele vya maumbo mchanganyiko au wakati sehemu inabeba thamani na null. Ujidosho kamili wa muungano tofauti (kuchagua type au kind kama lebo na kugawanya matoleo) unahitaji sampuli nyingi — hiyo imepangwa lakini haiko katika toleo la leo.
Je, naweza kudosha aina kutoka sampuli nyingi za JSON?
Bado haiwezekani — kidosher cha leo kinasoma sampuli moja kwa wakati. Ukiwa na mzigo miwili ambayo inapaswa kushiriki kiolesura (sema, endpoint ya orodha na endpoint ya kipengele kimoja), suluhisho la vitendo ni kuzichanganya kuwa safu wima moja, kuzalisha kutoka hiyo, kisha kubadilisha jina la aina za muungano zinazotokana. Ujidosho wa sampuli nyingi uko kwenye ramani kwa sababu ndiyo njia pekee ya kutambua sehemu zilizopo katika jibu moja na hazipo katika nyingine.
Bandika mzigo, ipe mzizi jina, nakili violesura. Mfululizo wote hufanya kazi kwenye kivinjari chako, kwa hivyo API ambayo haijatosha au mwili wa webhook ulioandikwa unabaki kwenye mashine yako.