TypeScript Academy · Lektion

Distributive betingede typer

Forstå, hvordan betingelser fordeles over unionens medlemmer

Lektion 4 af 413 trin

Distributive betingede typer 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.

Velkommen

Fordelende betingede typer anvender en betinget type på hvert medlem af en union separat. Denne effektive funktion muliggør transformation og filtrering af unioner.

Hvad er fordeling

Når en betinget type har en ubundet generisk T, og T er en union, anvender TypeScript betingelsen separat på hvert unionsmedlem.
type Wrap<T> = T extends any ? { value: T } : never;
type R = Wrap<string | number>;
// = { value: string } | { value: number }

Den afgørende betingelse

Fordeling sker kun, når T er en ubundet (ikke indpakket) generisk typeparameter. Hvis du pakker T ind i en tuple, forhindres fordelingen.
type Bare<T> = T extends string ? 'yes' : 'no';
type Wrapped<T> = [T] extends [string] ? 'yes' : 'no';
type B = Bare<'a' | 'b'>; // 'yes' | 'yes' = 'yes'
type W = Wrapped<'a' | 'b'>; // 'no' — treated as a tuple

Filtrering af unioner med never

Hvis den falske gren returnerer never, filtreres unionsmedlemmerne fra.
type StringsOnly<T> = T extends string ? T : never;
type S = StringsOnly<string | number | boolean>; // string

Det indbyggede Extract

Extract er implementeret med en fordelende betingelse, der beholder medlemmer, som kan tildeles til U.
type Extract<T, U> = T extends U ? T : never;
type E = Extract<string | number | boolean, string | number>; // string | number

Det indbyggede Exclude

Exclude fjerner unionsmedlemmer, der kan tildeles til U.
type Exclude<T, U> = T extends U ? never : T;
type Ex = Exclude<string | number | boolean, boolean>; // string | number

Fordeling med ToArray

Anvend ToArray på hvert unionsmedlem separat via fordeling.
type ToArray<T> = T extends any ? T[] : never;
type R = ToArray<string | number>; // string[] | number[]

Anvendelse af forhindret fordeling

Nogle gange vil du behandle hele unionen som ét typeargument i stedet for at fordele den.
type IsUnion<T> = [T] extends [T] ? [T] extends [Exclude<T, T>] ? false : true : false;

Fordelende kortlagte typer

Kombinér fordelende betingelser med kortlagte typer for at transformere udvalgte egenskaber.
type PickByValue<T, V> = {
  [K in keyof T as T[K] extends V ? K : never]: T[K]
};

Fordelende betingelse i ReturnType

Den fordelende adfærd får ReturnType til at fungere korrekt, når T er en union af funktionstyper.
type Fn = (() => string) | (() => number);
type R = ReturnType<Fn>; // string | number

Iværksat og udskudt fordeling

TypeScript udskyder (evaluerer ikke) betingede typer med frie typeparametre, indtil de er afgjort — det kaldes doven evaluering.

Hurtigt tjek

Hvad er `type R = (string | number) extends string ? 'yes' : 'no'`, når T IKKE er en ubundet generisk type?

Opsummering

Fordelende betingede typer anvendes på hvert unionsmedlem separat, når T er en ubundet generisk parameter. Det danner grundlag for Extract, Exclude og tilpasset filtrering af unioner. Pak T ind i en tuple for at forhindre fordeling.
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 “Distributive betingede typer” gratis?

Ja — hele teksten til “Distributive betingede typer” 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 “Distributive betingede typer”?

Forstå, hvordan betingelser fordeles over unionens medlemmer 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 “Distributive betingede typer”?

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. keyof og typer med indekseret adgang
  2. Generiske begrænsninger: Indsnævring af typeparametre
  3. Betingede typer: T extends U ? X : Y
  4. Distributive betingede typer
← Tilbage til TypeScript Academy