TypeScript Academy · Oppitunti

Tuplen rest-alkiot ja curryn tyypit

Käyttäkää tuplen rest-alkioita mielivaltaisten argumenttilistojen tallentamiseen ja rakentakaa pieniä curry-apufunktioita tyyppipäätelmän avulla.

Oppitunti 1/38 vaihetta

Tuplen rest-alkiot ja curryn tyypit on ilmainen TypeScript Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/3. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu TypeScript Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. TypeScript Academy-kurssilla on yhteensä 3 oppituntia.

Johdanto

Tavoite: Mallintakaa argumenttiluetteloita variadic-tupleilla ja kirjoittakaa pieni mutta hyödyllinen curry-apuohjelma. Näin API:t pysyvät joustavina ja tyyppiturvallisuus säilyy.

Variadic-tuplejen perusteet

Malli [...A, L]: ensin tulevat alkuosan argumentit (A-tuple) ja sitten viimeinen argumentti (L). Se on apuohjelmien perusta.

type HeadTail<A extends any[], L> = [...A, L]

function callWithLast<A extends any[], L, R>(fn: (...args: [...A, L]) => R, last: L, ...head: A): R {
  return fn(...head, last)
}

// Example
function join3(a: string, b: number, c: boolean) { return `${a}-${b}-${c}` }
const r = callWithLast(join3, true, "x", 42)   // ok → string

Curry-apuohjelma

Pieni curry-apuohjelma: [...A, L] -mallin ansiosta sekä alkuosan että viimeisen argumentin tyypit ovat oikein.

function curryLast<A extends any[], L, R>(fn: (...args: [...A, L]) => R) {
  return (last: L) => (...head: A) => fn(...head, last)
}

const curried = curryLast(join3)
const out = curried(true)("x", 42) // string

Yleinen curryFromFn

Yleinen ratkaisu: Päätelkää Tail ja Last tyypistä Parameters<F>, jolloin parametrien määrä ja niiden tyypit säilyvät.

type Fn = (...args: any[]) => any

type Tail<T extends any[]> = T extends [...infer H, any] ? H : never

type Last<T extends any[]> = T extends [...any[], infer L] ? L : never

function curryFromFn<F extends Fn>(fn: F) {
  type A = Tail<Parameters<F>>
  type L = Last<Parameters<F>>
  return (last: L) => (...head: A) => fn(...head, last)
}

const cur = curryFromFn(join3)
const o2 = cur(true)("x", 42) // still string

Yhdistäminen tupleilla

Kuljettakaa arvot muodossa A → B → C compose-apuohjelmalla: A-tuplen argumentit säilyvät ja palautustyypit ketjuttuvat.

function compose<A extends any[], B, C>(g: (b: B) => C, f: (...args: A) => B) {
  return (...args: A): C => g(f(...args))
}

function len(a: string, b: number) { return `${a}${b}`.length }
function isEven(n: number) { return n % 2 === 0 }

const comp = compose(isEven, len)
const ok = comp("id", 99) // boolean

Vinkkejä

Vinkkejä:

Variadic-tuplet edellyttävät TS 4.0 -versiota tai uudempaa, joten pitäkää kohdeympäristö ajan tasalla.

Ohjatkaa kääntäjää: joskus tyypin päättely paranee, kun kirjoitatte tyyppiparametrit eksplisiittisesti.

Liiallinen yleistäminen lisää API-suunnittelun monimutkaisuutta; yksinkertaiset apuohjelmat ovat tehokkaimpia.

Curry-allekirjoituksen tarkistus

Pikatarkistus: Mikä allekirjoitus kuvaa curry-apuohjelman kaikki argumentit A ja viimeisen argumentin L?

Kertaus

Kertaus: Mallintakaa argumenttiluetteloita [...A, L] -rakenteella, kirjoittakaa pienet curry- ja compose-apuohjelmat ja säilyttäkää tyypit automaattisesti.

Aloita maksutta

Opi TypeScript tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
101
Oppitunnit
352

Usein kysytyt kysymykset

Onko oppitunti ”Tuplen rest-alkiot ja curryn tyypit” ilmainen?

Kyllä – oppitunnin ”Tuplen rest-alkiot ja curryn tyypit” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko TypeScript Academy-kurssin, päivitä CoddyKit PROhon. TypeScript Academy-kurssilla on yhteensä 3 oppituntia.

Mitä opin oppitunnilla ”Tuplen rest-alkiot ja curryn tyypit”?

Käyttäkää tuplen rest-alkioita mielivaltaisten argumenttilistojen tallentamiseen ja rakentakaa pieniä curry-apufunktioita tyyppipäätelmän avulla. Harjoittelet TypeScript Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni TypeScript Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin TypeScript Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/3.

Kuinka kauan ”Tuplen rest-alkiot ja curryn tyypit”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä TypeScript Academy-oppitunnilla?

Kyllä. Jokainen TypeScript Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Tuplen rest-alkiot ja curryn tyypit
  2. Funktioiden ja argumenttien turvallinen koostaminen
  3. Vahvasti tyypitetyt rakentajat
← Takaisin: TypeScript Academy