TypeScript Academy · Lektion

Praktiske anvendelser af infer: Udpakning af Promises

Pak Promise-, Array- og brugerdefinerede wrapper-typer ud

Lektion 4 af 413 trin

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>;          // number

Den 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 automatically

Udpakning 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>>>; // number

Udpakning 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[]>; // number

Udpakning 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>>; // User

Udpakning 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>>; // User

Udpakning 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[]>>; // User

Betinget 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>;          // boolean

Typet 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>>>; // User

Fejlsikker 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>; // number

Opsummering: 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.

Gratis at komme i gang

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

  1. Forstå infer i betingede typer
  2. Opbygning af ReturnType og Parameters fra bunden
  3. Dybt indlejrede infer-mønstre
  4. Praktiske anvendelser af infer: Udpakning af Promises
← Tilbage til TypeScript Academy