Result-tyyppien mallintaminen
Esittäkää onnistuminen ja epäonnistuminen datana Result-tyypin avulla.
Result-tyyppien mallintaminen on ilmainen TypeScript Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/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.
Result-tyyppi
Result kuvaa operaatiota, joka joko onnistuu palauttaen arvon tai epäonnistuu palauttaen virheen. Se on diskriminoitu unioni, jonka voi palauttaa poikkeuksen heittämisen sijaan.
Result-tyypin määrittäminen
Klassisessa rakenteessa käytetään ok-diskriminanttia. Kun ok on tosi, mukana on value; kun se on epätosi, mukana on error.
type Result<T, E> =
| { ok: true; value: T }
| { ok: false; error: E };Rakentaja-apufunktiot
Pienet ok- ja err-apufunktiot tekevät tulosten rakentamisesta tiivistä ja helposti luettavaa sen sijaan, että objektilitteraalit kirjoitettaisiin joka kerta käsin.
const ok = <T>(value: T): Result<T, never> => ({ ok: true, value });
const err = <E>(error: E): Result<never, E> => ({ ok: false, error });Result-arvon palauttaminen
Virhealtis funktio palauttaa joko ok(value)- tai err(error)-arvon. Paluutyyppi ilmoittaa molemmista mahdollisuuksista jokaiselle kutsujalle.
function divide(a: number, b: number): Result<number, string> {
return b === 0 ? err("divide by zero") : ok(a / b);
}Tyypin tarkentaminen ok-arvon perusteella
result.ok-arvon tarkistaminen tarkentaa unionityyppiä. Tosihaarassa TypeScript tietää, että value on olemassa; epätosihaarassa se tietää, että error on olemassa.
const r = divide(10, 2);
if (r.ok) console.log(r.value); // 5
else console.log(r.error);Diskriminantti ohjaa turvallisuutta
ok-kenttä on diskriminantti, jonka avulla kääntäjä voi valita oikean haaran. Ette voi käyttää value-arvoa todistamatta ensin, että ok on tosi.
const r = divide(1, 0);
// r.value here is a type error until we check r.ok
if (!r.ok) console.log("err:", r.error);Tyypitetyt virheet
Virheet voivat olla muutakin kuin merkkijonoja. Tyypitetyn virheunionin avulla kutsujat voivat käsitellä kutakin virhetyyppiä täsmällisesti tyypin tarkentamisen jälkeen.
type DivErr = { kind: "zero" } | { kind: "overflow" };
function div(a: number, b: number): Result<number, DivErr> {
if (b === 0) return err({ kind: "zero" });
return ok(a / b);
}Kattava virheenkäsittely
Koska virhetyyppi on unioni, sen diskriminanttiin perustuvan switch-lauseen kattavuus voidaan tarkistaa. Näin varmistetaan, että jokainen epäonnistumistapa käsitellään.
const r = div(1, 0);
if (!r.ok) {
switch (r.error.kind) {
case "zero": console.log("no zero"); break;
case "overflow": console.log("too big"); break;
}
}Oletusarvon palauttava apufunktio
Joskus haluatte vain arvon tai varavaihtoehdon. Pieni unwrapOr on selkeä ja pitää epäonnistumisen käsittelyn paikallisena.
function unwrapOr<T, E>(r: Result<T, E>, fallback: T): T {
return r.ok ? r.value : fallback;
}
console.log(unwrapOr(divide(1, 0), -1)); // -1Result verrattuna poikkeuksen heittämiseen
Result siirtää epäonnistumisen paluutyyppiin, joten kutsujien on käsiteltävä se. Haittapuolena on eksplisiittisempi koodi, mikä on yleensä kannattava hinta odotetuista virheistä.
Täydellinen esimerkki
Kootaan kaikki yhteen: määritelkää apufunktiot, palauttakaa Result-arvoja ja tarkentakaa tyyppi ennen käyttöä. Kääntäjä varmistaa, että virhehaara huomioidaan.
function safeParse(s: string): Result<number, string> {
const n = Number(s);
return Number.isNaN(n) ? err("NaN") : ok(n);
}
const p = safeParse("42");
console.log(p.ok ? p.value : p.error); // 42Pikatarkistus
Tämän oppitunnin pikatarkistus.
Kertaus
Result<T, E> on diskriminoitu unioni, joka on joko { ok: true; value } tai { ok: false; error }. Rakentakaa se ok- ja err-apufunktioilla ja tarkentakaa tyyppi ok-arvon perusteella, jotta voitte käyttää value- tai error-arvoa turvallisesti. Tyypitetyt virheet mahdollistavat kattavan käsittelyn.
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 ”Result-tyyppien mallintaminen” ilmainen?
Kyllä – oppitunnin ”Result-tyyppien mallintaminen” 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 ”Result-tyyppien mallintaminen”?
Esittäkää onnistuminen ja epäonnistuminen datana Result-tyypin avulla. 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 2/4.
Kuinka kauan ”Result-tyyppien mallintaminen”-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
- Virheiden heittämisen ongelma
- Result-tyyppien mallintaminen
- Option- ja Maybe-tyypit
- Railway-oriented programming