TypeScript Academy · leksjon

Addisjon og subtraksjon på typenivå

Bygg aritmetiske operasjoner ved å manipulere tupler.

Leksjon 2 av 413 trinn

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

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

Subtraksjon 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>; // 3

Subtraksjon 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>; // 0

Underflyt 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>; // 0

Inkrementering 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>; // 3

Multiplikasjon 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>; // 12

Hjelpefunksjonen 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"];   // 5

Sette 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>; // 10

Praktisk 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 limits

Hurtigsjekk

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/Dec er variantene som utfører ett trinn.
  • BuildTuple er den felles grunnprimitiven.

Neste steg: sammenligne tall på typenivå.

Gratis å komme i gang

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

  1. Telle med tuplelengde
  2. Addisjon og subtraksjon på typenivå
  3. Sammenligninger på typenivå
  4. Praktiske numeriske typeverktøy
← Tilbake til TypeScript Academy