Praktiske anvendelser af infer: Udpakning af Promises
Pak Promise-, Array- og brugerdefinerede wrapper-typer ud
Praktiske anvendelser af infer: Udpakning af Promises er en gratis TypeScript Academy-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i TypeScript Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. TypeScript Academy-kurset indeholder 4 lektioner i alt.
Udpakningsproblemet
Når du arbejder med asynkron kode, modtager du ofte Promise og har brug for den underliggende T. Nøgleordet infer gør denne udtrækning genanvendelig.
type Awaited<T> = T extends Promise<infer U> ? U : T;
type A = Awaited<Promise<string>>; // string
type B = Awaited<number>; // numberDen indbyggede Awaited-hjælpe-type
TypeScript 4.5 introducerede den indbyggede Awaited, som håndterer indlejrede løfter rekursivt.
type A = Awaited<Promise<Promise<string>>>; // string
// Handles arbitrary nesting automaticallyUdpakning med brugerdefineret dybde
Før Awaited blev indbygget, brugte udviklere rekursive typer med infer til at pakke løfter ud.
type DeepAwaited<T> =
T extends Promise<infer U> ? DeepAwaited<U> : T;
type A = DeepAwaited<Promise<Promise<number>>>; // numberUdpakning af arrayelementer
Det samme infer-mønster udtrækker elementtypen fra et array, svarende til den indbyggede tilgang med T[number].
type Element<T> = T extends (infer U)[] ? U : never;
type A = Element<string[]>; // string
type B = Element<number[]>; // numberUdpakning af Observable-typer
For RxJS-Observables udtrækker infer den udsendte type.
type ObservableType<T> = T extends Observable<infer U> ? U : never;
type A = ObservableType<Observable<User>>; // UserUdpakning af funktionsreturværdier
Kombiner ReturnType og Awaited for at få den løste værdi fra en asynkron funktion.
async function getUser(): Promise<User> { /* ... */ }
type UserResult = Awaited<ReturnType<typeof getUser>>; // UserUdpakning af indlejrede indpakninger
Du kan kæde infer for at håndtere typer, der er pakket ind i flere lag, f.eks. Promise.
type UnwrapPromiseArray<T> =
T extends Promise<infer U>
? U extends (infer V)[]
? V
: U
: T;
type A = UnwrapPromiseArray<Promise<User[]>>; // UserBetinget udpakning baseret på struktur
Brug infer til kun betinget at pakke bestemte typer ud, mens andre forbliver uændrede.
type MaybeUnwrap<T> =
T extends Promise<infer U> ? U : T extends (infer V)[] ? V : T;
type A = MaybeUnwrap<Promise<string>>; // string
type B = MaybeUnwrap<number[]>; // number
type C = MaybeUnwrap<boolean>; // booleanTypet wrapper til API-hentning
En generisk wrapper til hentning, der returnerer den løste datatype, er en klassisk anvendelse af infer-baseret udpakning.
async function fetchData<T>(url: string): Promise<T> {
const res = await fetch(url);
return res.json() as T;
}
type UserData = Awaited<ReturnType<typeof fetchData<User>>>; // UserFejlsikker udpakning
Result-mønsteret kombineret med infer lader dig udtrække succes-typen fra en diskrimineret union.
type Ok<T> = { ok: true; value: T };
type Err = { ok: false; error: string };
type ExtractOk<T> = T extends Ok<infer V> ? V : never;
type A = ExtractOk<Ok<number> | Err>; // numberOpsummering: Udpakning med infer
Nøgleordet infer er den schweiziske lommekniv til at udtrække typer fra indpakninger — løfter, arrays, Observables og Result-typer. Den indbyggede Awaited håndterer asynkron udpakning; brug brugerdefinerede typer til andre strukturer.
Hurtigt tjek
Hvad er den bedste måde at få den løste værdi-type fra en asynkron funktion?
Det har du lært
Infer-baseret udpakning er et praktisk værktøj til asynkron TypeScript-kode. Brug den indbyggede Awaited til løfter, og opbyg brugerdefinerede udpakkertyper til arrays, Observables og Result-mønstre.
Lær TypeScript med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 101
- Lektioner
- 352
Ofte stillede spørgsmål
Er lektionen “Praktiske anvendelser af infer: Udpakning af Promises” gratis?
Ja — hele teksten til “Praktiske anvendelser af infer: Udpakning af Promises” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af TypeScript Academy-kurset, skal du opgradere til CoddyKit PRO. TypeScript Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Praktiske anvendelser af infer: Udpakning af Promises”?
Pak Promise-, Array- og brugerdefinerede wrapper-typer ud Du øver dig i TypeScript Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på TypeScript Academy?
Der kræves ingen tidligere erfaring. TypeScript Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.
Hvor lang tid tager lektionen “Praktiske anvendelser af infer: Udpakning af Promises”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne TypeScript Academy-lektion?
Ja. Alle TypeScript Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Forstå infer i betingede typer
- Opbygning af ReturnType og Parameters fra bunden
- Dybt indlejrede infer-mønstre
- Praktiske anvendelser af infer: Udpakning af Promises