0Pricing
TypeScript Academy · Lekcja

Elementy rest krotek i typy curry

Używanie elementów rest krotek do przechwytywania dowolnych list argumentów oraz tworzenie niewielkich funkcji curry z inferencją typów

Elementy rest krotek i typy curry to bezpłatna lekcja TypeScript Academy na CoddyKit. To lekcja 1 z 3. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej TypeScript Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs TypeScript Academy zawiera 3 lekcji w sumie.

Wprowadzenie

Cel: Przechwytywanie list argumentów za pomocą wariadycznych krotek i napisanie niewielkiej, ale użytecznej funkcji pomocniczej curry. Dzięki temu interfejsy API pozostają elastyczne, a bezpieczeństwo typów jest zachowane.

Podstawy krotek wariadycznych

Wzorzec [...A, L]: najpierw argumenty początkowe (krotka A), a następnie ostatni argument (L). To podstawa funkcji pomocniczych.

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

Funkcja pomocnicza curry

Prosta funkcja curry: dzięki [...A, L] zarówno typy argumentów początkowych, jak i ostatniego argumentu są poprawne.

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

Ogólne curryFromFn

Rozwiązanie ogólne: Wywnioskuj Tail/Last z Parameters<F>, zachowując liczbę parametrów i ich typy.

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

Komponowanie za pomocą krotek

Przepływ A → B → C można zrealizować za pomocą compose: argumenty krotki A zostają zachowane, a typy wyników są łączone.

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

Wskazówki

Wskazówki:

Krotki wariadyczne wymagają TS 4.0+; należy korzystać z aktualnej wersji środowiska docelowego.

Warto podpowiadać kompilatorowi: czasami jawne zapisanie parametrów typów poprawia wnioskowanie.

Nadmierne uogólnianie zwiększa złożoność projektowania API; najskuteczniejsze są proste funkcje pomocnicze.

Sprawdzenie sygnatury curry

Szybkie sprawdzenie: Która sygnatura przechwytuje dowolne argumenty A oraz ostatni argument L dla funkcji pomocniczej curry?

Podsumowanie

Podsumowanie: Listy argumentów można modelować za pomocą [...A, L], a niewielkie funkcje pomocnicze curry i compose pozwalają automatycznie zachować typy.

Często zadawane pytania

Czy lekcja „Elementy rest krotek i typy curry” jest bezpłatna?

Tak — pełny tekst „Elementy rest krotek i typy curry” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu TypeScript Academy, przejdź na CoddyKit PRO. Kurs TypeScript Academy zawiera 3 lekcji w sumie.

Co nauczysz się w „Elementy rest krotek i typy curry”?

Używanie elementów rest krotek do przechwytywania dowolnych list argumentów oraz tworzenie niewielkich funkcji curry z inferencją typów Ćwiczysz TypeScript Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć TypeScript Academy?

Nie wymagamy żadnego doświadczenia. TypeScript Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 3.

Ile czasu zajmuje lekcja „Elementy rest krotek i typy curry”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji TypeScript Academy?

Tak. Każda lekcja TypeScript Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Elementy rest krotek i typy curry
  2. Bezpieczne komponowanie funkcji i argumentów
  3. Konstruktory silnie typowane
← Powrót do TypeScript Academy