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 → stringFunkcja 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) // stringOgó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 stringKomponowanie 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) // booleanWskazó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
- Elementy rest krotek i typy curry
- Bezpieczne komponowanie funkcji i argumentów
- Konstruktory silnie typowane