TypeScript Academy · Oppitunti

infer-avainsanan ymmärtäminen ehdollisissa tyypeissä

Poimikaa sisäkkäisiä tyyppejä infer-avainsanalla extends-lausekkeissa

Oppitunti 1/413 vaihetta

infer-avainsanan ymmärtäminen ehdollisissa tyypeissä 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.

Mikä infer on?

Avainsana infer esiintyy ehdollisten tyyppien sisällä ja antaa TypeScriptin napata tyyppimuuttujan vastaavasta kohdasta, jotta sitä voidaan käyttää tosihaarassa.

type GetReturn<T> = T extends (...args: any[]) => infer R ? R : never;

Esimerkki infer-avainsanan peruskäytöstä

Tässä poimitaan minkä tahansa funktion palautustyyppi käyttämällä infer R -rakennetta.

type ReturnType<T> = T extends (...args: any[]) => infer R ? R : never;
type A = ReturnType<() => string>;  // string
type B = ReturnType<() => number[]>; // number[]

Miten infer toimii

TypeScript vertaa tyypin T rakennetta kuvioon. Jos rakenteet täsmäävät, päätelty muuttuja sisältää vastaavan osan. Muussa tapauksessa valitaan epätosihaara.

type First<T> = T extends [infer F, ...any[]] ? F : never;
type X = First<[string, number, boolean]>; // string

Päätteleminen geneerisistä parametreista

Voitte päätellä geneerisen tyypin tyyppiargumentin, esimerkiksi poimia tyypin T tyypistä Promise.

type Unwrap<T> = T extends Promise<infer U> ? U : T;
type A = Unwrap<Promise<string>>; // string
type B = Unwrap<number>;          // number

Useita infer-muuttujia

Voitte käyttää yhdessä ehdollisessa tyypissä useita infer-lausekkeita ja napata samalla kertaa useita kohtia.

type Head<T> = T extends [infer H, ...infer Tail] ? H : never;
type Tail<T> = T extends [infer H, ...infer Tail] ? Tail : never;

infer funktioiden parametreissa

Infer voi napata myös funktioiden parametrien tyypit, ei ainoastaan palautustyyppejä.

type FirstParam<T> = T extends (first: infer P, ...rest: any[]) => any ? P : never;
type A = FirstParam<(x: string, y: number) => void>; // string

Jakautuva toiminta infer-avainsanan kanssa

Kun T on unioni, ehdolliset tyypit, myös infer-rakennetta käyttävät, jakautuvat jokaiselle unionin jäsenelle.

type UnwrapAll<T> = T extends Promise<infer U> ? U : T;
type X = UnwrapAll<Promise<string> | Promise<number>>;
// string | number

Sisäkkäinen infer

Voitte sisällyttää infer-rakenteita toistensa sisään ja päästä näin syvemmälle tyyppirakenteeseen, esimerkiksi poimia promessan sisällä olevan taulukon arvotyypin.

type UnwrapPromiseArray<T> =
  T extends Promise<infer U>
    ? U extends (infer V)[]
      ? V
      : U
    : T;

infer merkkijonokuvioiden kanssa

Template literal -tyypit yhdistettynä infer-avainsanaan mahdollistavat osamerkkijonojen poimimisen merkkijonoliteraalityypeistä.

type GetDomain<T extends string> =
  T extends `https://${infer Domain}` ? Domain : never;
type D = GetDomain<"https://example.com">; // "example.com"

Yleiset ongelmat

Infer toimii vain ehdollisen tyypin extends-lausekkeen sisällä. Sen käyttäminen muualla aiheuttaa käännösvirheen. Lisäksi epätosihaarassa oleva infer ei ole käytettävissä.

// Error: infer can only appear in extends clauses
type Bad<T> = infer R; // SyntaxError

Kertaus: infer

Avainsanan infer avulla TypeScript voi napata tyyppifragmentin ehdollisen tyypin rakenteellisesta täsmäytyksestä. Se on esimerkiksi ReturnType-, Parameters- ja Awaited-utility-tyyppien perusta.

Pikatarkistus

Missä avainsanaa infer voi käyttää?

Mitä opitte

Avainsana infer mahdollistaa tyyppitason kuvioiden täsmäyttämisen poimimalla tyyppifragmentteja rakenteellisista kuvioista. Se on TypeScriptin tehokkaiden utility-tyyppien ja tyyppiturvallisen metaprogrammoinnin perusta.

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 ”infer-avainsanan ymmärtäminen ehdollisissa tyypeissä” ilmainen?

Kyllä – oppitunnin ”infer-avainsanan ymmärtäminen ehdollisissa tyypeissä” 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 ”infer-avainsanan ymmärtäminen ehdollisissa tyypeissä”?

Poimikaa sisäkkäisiä tyyppejä infer-avainsanalla extends-lausekkeissa 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 ”infer-avainsanan ymmärtäminen ehdollisissa tyypeissä”-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. infer-avainsanan ymmärtäminen ehdollisissa tyypeissä
  2. ReturnType- ja Parameters-tyyppien rakentaminen alusta alkaen
  3. Syvästi sisäkkäiset päättelymallit
  4. infer-avainsanan käytännön käyttötapaukset: Promise-tyyppien avaaminen
← Takaisin: TypeScript Academy