infer-avainsanan ymmärtäminen ehdollisissa tyypeissä
Poimikaa sisäkkäisiä tyyppejä infer-avainsanalla extends-lausekkeissa
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]>; // stringPää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>; // numberUseita 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>; // stringJakautuva 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 | numberSisä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; // SyntaxErrorKertaus: 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.
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
- infer-avainsanan ymmärtäminen ehdollisissa tyypeissä
- ReturnType- ja Parameters-tyyppien rakentaminen alusta alkaen
- Syvästi sisäkkäiset päättelymallit
- infer-avainsanan käytännön käyttötapaukset: Promise-tyyppien avaaminen