TypeScript Academy · Oppitunti

Kattavuuden tarkistaminen never-tyypillä

Varmistakaa never-tyypillä, että kaikki unionin tapaukset käsitellään

Oppitunti 4/413 vaihetta

Kattavuuden tarkistaminen never-tyypillä on ilmainen TypeScript Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/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.

Tervetuloa

Kattavuuden tarkistaminen käyttää `never`-tyyppiä varmistaakseen, että unionin jokainen tapaus käsitellään. Kun lisäätte uuden unionin jäsenen, TypeScript ilmoittaa täsmälleen, missä koodia on päivitettävä.

Kattavuusongelma

Kun käsittelette unionityyppiä switch-lauseella ja unohdatte jonkin tapauksen, JavaScript siirtyy hiljaisesti eteenpäin. TypeScript voi havaita tämän never-tarkistuksella.
type Shape = 'circle' | 'square';
function area(s: Shape): number {
  if (s === 'circle') return 3.14;
  if (s === 'square') return 1;
  // What if we add 'triangle'?
}

never-kattavuusmalli

Määritä jäljelle jäävän arvon tyypiksi `never`. Jos TypeScript päättelee tyypiksi jonkin muun kuin never-tyypin, jokin tapaus jää käsittelemättä.
function assertNever(x: never): never {
  throw new Error('Unexpected value: ' + x);
}
function area(s: Shape): number {
  switch (s) {
    case 'circle': return 3.14;
    case 'square': return 1;
    default: return assertNever(s);
  }
}

Uuden unionijäsenen lisääminen

Jos lisäät Shape-unioniin arvon 'triangle', TypeScript ilmoittaa virheestä kohdassa `assertNever(s)` ja kehottaa käsittelemään uuden tapauksen.
type Shape = 'circle' | 'square' | 'triangle';
// Now TypeScript errors on assertNever(s) because s is 'triangle'
// — it's not never!

Sisäinen never-tarkistus

Voit tehdä kattavuustarkistuksen suoraan ilman apufunktiota.
function handle(shape: Shape): string {
  switch (shape.kind) {
    case 'circle': return 'circle';
    case 'square': return 'square';
    default:
      const _: never = shape; // Error if not exhaustive
      throw new Error('Unknown shape');
  }
}

Kattavuus ilman switch-rakennetta

Käytä samaa tekniikkaa if/else-ketjuissa.
function process(action: Action): void {
  if (action.type === 'A') { /* ... */ }
  else if (action.type === 'B') { /* ... */ }
  else {
    const _: never = action; // exhaustive
  }
}

never geneeristen tyyppirajoitteiden yhteydessä

never on pohjatyyppi, ja ehdollisissa tyypeissä se on hyödyllinen mahdottomien haarojen esittämiseen.
type NonNullable<T> = T extends null | undefined ? never : T;
// Removes null and undefined from T

never mahdottomien tilojen esittämiseen

never on hyödyllinen mallinnettaessa tiloja, joiden pitäisi olla tyyppijärjestelmässä mahdottomia.
type State<T> =
  | { kind: 'loading' }
  | { kind: 'success'; data: T }
  | { kind: 'error'; msg: string };
// There should never be a state with kind: 'unknown'

never ehdollisissa tyypeissä

never-toimintoa käytetään ehdollisissa tyypeissä ei-toivottujen tyyppijäsenten suodattamiseen.
type NonFunctions<T> = {
  [K in keyof T]: T[K] extends Function ? never : K
}[keyof T];
// Returns keys whose values are not functions

never välittyy unionien läpi

never on unionityyppien neutraali alkio — T | never = T.
type T = string | never; // string
type U = never | number | never; // number

assertNever-apufunktio

Yksinkertainen assertNever-apufunktio kuuluu jokaiseen TypeScript-projektiin kattavuustarkistuksia varten.
function assertNever(value: never, message?: string): never {
  throw new Error(message ?? `Unhandled: ${JSON.stringify(value)}`);
}

Pikatarkistus

Mitä tapahtuu rivillä `default: assertNever(s)`, jos s:llä on edelleen mahdollinen tyyppi, jota ei käsitellä?

Kertaus

Käytä `assertNever(x: never)` -kutsua switch-rakenteen default-tapauksissa, jotta saat käännösaikaisen virheen, jos kaikkia unionin jäseniä ei käsitellä. Näin koodisi säilyy oikeellisena unionin kasvaessa ajan mittaan.
Aloita maksutta

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 ”Kattavuuden tarkistaminen never-tyypillä” ilmainen?

Kyllä – oppitunnin ”Kattavuuden tarkistaminen never-tyypillä” 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 ”Kattavuuden tarkistaminen never-tyypillä”?

Varmistakaa never-tyypillä, että kaikki unionin tapaukset käsitellään 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 4/4.

Kuinka kauan ”Kattavuuden tarkistaminen never-tyypillä”-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

  1. typeof- ja truthiness-tyyppien kaventaminen
  2. instanceof- ja in-tyyppien kaventaminen
  3. Käyttäjän määrittämät type guard -funktiot
  4. Kattavuuden tarkistaminen never-tyypillä
← Takaisin: TypeScript Academy