TypeScript Academy · Oppitunti

Käyttäjän määrittämät type guard -funktiot

Kirjoittakaa is-predikaatteja omien type guard -tarkistusten luomiseksi

Oppitunti 3/413 vaihetta

Käyttäjän määrittämät type guard -funktiot on ilmainen TypeScript Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/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

Käyttäjän määrittämien tyyppivartijoiden avulla voitte kapseloida tyypin tarkistamisen uudelleenkäytettävään funktioon, jonka palautustyyppinä on `is`-predikaatti.

is-predikaatin palautustyyppi

Tyyppivartijafunktio palauttaa tyypin `paramName is Type`. Kun funktio palauttaa arvon true, TypeScript tarkentaa parametrin kyseiseksi tyypiksi.
function isString(val: unknown): val is string {
  return typeof val === 'string';
}

Tyyppivartijan käyttäminen

Kutsukaa tyyppivartijaa if-ehdossa. TypeScript tarkentaa tyypin lohkon sisällä.
function process(val: unknown) {
  if (isString(val)) {
    console.log(val.toUpperCase()); // val: string
  }
}

Rajapintojen tyyppivartijat

Koska instanceof-operaattoria ei voi käyttää rajapintojen kanssa, tyyppivartijat ovat ensisijainen tapa tarkentaa rajapintaunioneja.
interface Cat { meow(): void }
interface Dog { bark(): void }
function isCat(pet: Cat | Dog): pet is Cat {
  return 'meow' in pet;
}

Monimutkaisten olioiden tyyppivartijat

Kirjoittakaa tyyppivartija, joka vahvistaa olion rakenteen ajonaikana ennen kuin käytätte sitä tiettynä tyyppinä.
interface User { name: string; age: number; }
function isUser(val: unknown): val is User {
  return (
    typeof val === 'object' &&
    val !== null &&
    typeof (val as any).name === 'string' &&
    typeof (val as any).age === 'number'
  );
}

Tyyppivartijat ja tyyppiväitteet

Tyyppivartijat tarkistavat tyypin ajonaikana. Tyyppiväitteet (as Type) toimivat vain käännösaikana ja voivat antaa virheellisen tiedon. Suosikaa vartijoita ulkoisen datan käsittelyssä.

Array.isArray tyyppivartijana

Array.isArray on sisäänrakennettu tyyppivartija. TypeScript ymmärtää sen ja tarkentaa tyypin vastaavasti.
function flatten(val: string | string[]): string[] {
  return Array.isArray(val) ? val : [val];
}

Geneeriset tyyppivartijat

Tyyppivartijat voivat olla geneerisiä, jolloin niillä voi luoda uudelleenkäytettäviä ajonaikaisia tarkistimia.
function isNonNull<T>(val: T | null | undefined): val is T {
  return val !== null && val !== undefined;
}
const values = [1, null, 2, undefined].filter(isNonNull);
// values: number[]

Väitefunktiot

Väitefunktiot (jotka käyttävät asserts-määrettä) heittävät poikkeuksen, jos ehto on epätosi, ja tarkentavat tyypin kutsun jälkeen.
function assertIsString(val: unknown): asserts val is string {
  if (typeof val !== 'string') throw new TypeError('Not a string');
}
assertIsString(input);
console.log(input.toUpperCase()); // narrowed to string

Tyyppivartijoiden vastuu

TypeScript luottaa tyyppivartijan palautusarvoihin täysin. Jos vartijanne on virheellinen, TypeScript ei havaitse ristiriitaa käännösaikana.

Tyyppivartijat filter- ja find-metodeissa

Välittäkää tyyppivartijat suoraan array.filter-metodille tulostyypin tarkentamista varten.
const mixed: (string | null)[] = ['a', null, 'b'];
const strings = mixed.filter((x): x is string => x !== null);
// strings: string[]

Pikakertaus

Millainen palautustyypin merkintä määrittää funktion TypeScriptin tyyppivartijaksi?

Kertaus

Käyttäjän määrittämät tyyppivartijat käyttävät `param is Type` -palautustyyppejä tyypin tarkentamislogiikan kapselointiin. Ne toimivat filter- ja find-metodien kanssa, mahdollistavat rajapintojen tarkentamisen ja voivat olla geneerisiä. Väitefunktiot tarkentavat tyypin palauttamatta totuusarvoa.
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 ”Käyttäjän määrittämät type guard -funktiot” ilmainen?

Kyllä – oppitunnin ”Käyttäjän määrittämät type guard -funktiot” 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 ”Käyttäjän määrittämät type guard -funktiot”?

Kirjoittakaa is-predikaatteja omien type guard -tarkistusten luomiseksi 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 3/4.

Kuinka kauan ”Käyttäjän määrittämät type guard -funktiot”-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