Funktionssammensætning med typer
Sammensæt funktioner, mens De bevarer typesikkerheden
Funktionssammensætning med typer er en gratis TypeScript Academy-lektion på CoddyKit. Dette er lektion 3 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.
Hvad er funktionssammensætning?
Funktionssammensætning kombinerer små funktioner til en større funktion. compose(f, g) returnerer en funktion, der først anvender g og derefter giver resultatet videre til f.
Den grundlæggende definition
Matematisk gælder compose(f, g)(x) = f(g(x)). Funktionerne køres fra højre mod venstre: den længst til højre køres først.
const compose = (f: (n: number) => number, g: (n: number) => number) =>
(x: number) => f(g(x));
const inc = (n: number) => n + 1;
const dbl = (n: number) => n * 2;
console.log(compose(inc, dbl)(5)); // 11 (5*2 then +1)Rækkefølge fra højre mod venstre
Rækkefølgen betyder noget. compose(inc, dbl) fordobler først og lægger derefter én til, mens compose(dbl, inc) lægger én til først. Læs sammensætningen indefra og ud.
console.log(compose(dbl, inc)(5)); // 12 (5+1 then *2)Typning af sammensætning med generiske typer
Generiske typer lader inddata- og uddatatyperne være forskellige. g afbilder A på B, f afbilder B på C, og resultatet afbilder A på C.
function compose<A, B, C>(f: (b: B) => C, g: (a: A) => B): (a: A) => C {
return a => f(g(a));
}Ændring af typer undervejs
Fordi de generiske typer danner kæden A -> B -> C, kan sammensætning omdanne en værdi gennem flere former, f.eks. fra streng til tal til streng.
const length = (s: string) => s.length;
const toStr = (n: number) => "len=" + n;
const describe = compose(toStr, length);
console.log(describe("hello")); // len=5Typegrænsen skal passe
Uddatene fra g skal passe med inddataene til f. Hvis de ikke stemmer overens, afviser kompileren sammensætningen og opdager forbindelsesfejl tidligt.
// compose(length, toStr) would error:
// toStr returns string, length expects string -> ok here,
// but mismatched pairs are flagged by the compiler.Sammensætning af tre funktioner
Du kan indlejre sammensætninger eller skrive en version med tre argumenter. Reglen om højre mod venstre gælder stadig for dem alle.
const compose3 = <A, B, C, D>(
f: (c: C) => D, g: (b: B) => C, h: (a: A) => B
) => (a: A): D => f(g(h(a)));
const inc = (n: number) => n + 1;
const dbl = (n: number) => n * 2;
const neg = (n: number) => -n;
console.log(compose3(neg, dbl, inc)(3)); // -8Sammensætning opbygger funktionskæder
Ved at sammensætte små, rene funktioner kan du deklarativt samle komplekse transformationer. Hver del kan testes isoleret.
const trim = (s: string) => s.trim();
const upper = (s: string) => s.toUpperCase();
const clean = compose(upper, trim);
console.log(clean(" hi ")); // HIHvorfor rene funktioner er bedst til sammensætning
Sammensætning forudsætter, at hver funktion kun afhænger af sine inddata. Rene funktioner garanterer dette, så sammensætningen af dem giver endnu en forudsigelig, ren funktion.
compose eller pipe
compose kører fra højre mod venstre og afspejler matematisk notation. Mange foretrækker at læse fra venstre mod højre, og det er det, pipe giver mulighed for. Det gennemgår vi i næste afsnit.
Hold delene små
Sammensætning fungerer bedst, når hver funktion gør én lille ting. Små, navngivne, rene trin gør den sammensatte funktionskæde selvforklarende og nem at omarrangere.
Hurtigt tjek
Et hurtigt tjek af denne lektion.
Opsummering
compose(f, g)(x) = f(g(x)) køres fra højre mod venstre. Generisk typning danner kæden A -> B -> C, så uddatene fra g skal passe med inddataene til f, hvilket lader kompileren kontrollere funktionskæden af små, rene funktioner.
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 “Funktionssammensætning med typer” gratis?
Ja — hele teksten til “Funktionssammensætning med 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 “Funktionssammensætning med typer”?
Sammensæt funktioner, mens De bevarer typesikkerheden 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 3 af 4.
Hvor lang tid tager lektionen “Funktionssammensætning med 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
- Rene funktioner og uforanderlighed
- Currying og delvis anvendelse
- Funktionssammensætning med typer
- Typede pipe- og flow-utilities