Addisjon og subtraksjon på typenivå
Bygg aritmetiske operasjoner ved å manipulere tupler.
Addisjon og subtraksjon på typenivå er en gratis leksjon i TypeScript Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i TypeScript Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i TypeScript Academy inneholder totalt 4 leksjoner.
Aritmetikk med lengder
Med representasjonen basert på tuppellengder blir addisjon til konkatenering, og subtraksjon blir fjerning av et prefiks. Du regner på tuppler og leser deretter av den resulterende lengden.
type BuildTuple<N extends number, Acc extends unknown[] = []> =
Acc["length"] extends N ? Acc : BuildTuple<N, [...Acc, unknown]>;Addisjon
For å legge sammen A + B bygger du en tuppel med lengde A, bygger en med lengde B, sprer begge inn i en ny tuppel og leser av lengden.
type Add<A extends number, B extends number> =
[...BuildTuple<A>, ...BuildTuple<B>]["length"];
type S = Add<3, 4>; // 7Hvorfor konkatenering gir addisjon
En tuppel med lengde 3 etterfulgt av en tuppel med lengde 4 gir en tuppel med lengde 7. Når du slår sammen strekene i to telletavler, får du én samlet telletavle, og lengdene blir derfor lagt sammen.
type A = Add<2, 2>; // 4
type B = Add<0, 5>; // 5
type C = Add<1, 6>; // 7Subtraksjon med prefiks
For å beregne A - B bygger du en tuppel med lengde A og utleder den som et prefiks med lengde B etterfulgt av en rest. rest har lengden A - B.
type Sub<A extends number, B extends number> =
BuildTuple<A> extends [...BuildTuple<B>, ...infer Rest]
? Rest["length"]
: never;
type D = Sub<7, 4>; // 3Subtraksjon trinn for trinn
For Sub<7, 4> bygger du en tuppel med lengde 7, tilpasser et prefiks med lengde 4, henter ut Rest (lengde 3) og leser av lengden. Prefikset som fjernes, er nøyaktig B streker.
type A = Sub<5, 2>; // 3
type B = Sub<4, 4>; // 0Underflyt gir never
Tall på typenivå er ikke-negative. Hvis B > A, finnes det ikke noe gyldig prefiks, mønsteret mislykkes, og resultatet blir never. Du kan sette resultatet til 0 som standard hvis du foretrekker det.
type A = Sub<2, 5>; // never
type SubSafe<A extends number, B extends number> =
[Sub<A, B>] extends [never] ? 0 : Sub<A, B>;
type B = SubSafe<2, 5>; // 0Inkrementering og dekrementering
Spesialtilfellene addisjon og subtraksjon med én forekommer ofte nok til å få egne navn. Inc legger til ett element, mens Dec fjerner ett.
type Inc<N extends number> = [...BuildTuple<N>, unknown]["length"];
type Dec<N extends number> =
BuildTuple<N> extends [unknown, ...infer R] ? R["length"] : 0;
type A = Inc<4>; // 5
type B = Dec<4>; // 3Multiplikasjon ved gjentakelse
Multiplikasjon er gjentatt addisjon. Legg B til en akkumulator A ganger ved å telle ned med Dec og samle resultatet med Add.
type Mul<A extends number, B extends number, Acc extends number = 0> =
A extends 0 ? Acc : Mul<Dec<A>, B, Add<Acc, B>>;
type A = Mul<3, 4>; // 12Hjelpefunksjonen BuildTuple
Alle operasjonene her avhenger av BuildTuple. Den er den eneste gjenbrukbare grunnprimitiven: gi den et tall, og få en tuppel med den lengden tilbake. Hold den på ett sted, og bygg resten oppå den.
type Five = BuildTuple<5>; // [unknown, unknown, unknown, unknown, unknown]
type N = Five["length"]; // 5Sette sammen operasjoner
Fordi hver operasjon tar imot og returnerer et tall, kan de settes fritt sammen. Du kan skrive uttrykk som Add<Mul<2, 3>, 4>, og kompilatoren evaluerer dem.
type Result = Add<Mul<2, 3>, 4>; // 10Praktisk forsiktighet
Disse triksene er nyttige for små antall: arrayindekser, faste størrelser og avgrensede intervaller. For store tall eller generell matematikk blir de upraktiske på grunn av rekursjonsgrensen og mangelen på negative tall. Bruk dem når verdiene forblir små og statiske.
type A = Add<8, 7>; // 15 (fine)
// Add<5000, 5000> would exceed recursion limitsHurtigsjekk
Test forståelsen din av aritmetikk på typenivå.
Oppsummering
Du har implementert aritmetikk i typesystemet.
- Add: konkatener tuppler og les av lengden.
- Sub: utled et prefiks og les av lengden på resten.
Inc/Decer variantene som utfører ett trinn.BuildTupleer den felles grunnprimitiven.
Neste steg: sammenligne tall på typenivå.
Lær deg TypeScript med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 101
- Leksjoner
- 352
Ofte stilte spørsmål
Er leksjonen «Addisjon og subtraksjon på typenivå» gratis?
Ja – hele teksten i «Addisjon og subtraksjon på typenivå» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av TypeScript Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i TypeScript Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Addisjon og subtraksjon på typenivå»?
Bygg aritmetiske operasjoner ved å manipulere tupler. Du øver på TypeScript Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med TypeScript Academy?
Ingen tidligere erfaring er nødvendig. TypeScript Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.
Hvor lang tid tar leksjonen «Addisjon og subtraksjon på typenivå»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne TypeScript Academy-leksjonen?
Ja. Alle TypeScript Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Telle med tuplelengde
- Addisjon og subtraksjon på typenivå
- Sammenligninger på typenivå
- Praktiske numeriske typeverktøy