Rest-элементы кортежей и типы каррирования
Используйте rest-элементы кортежей для сбора произвольных списков аргументов и создавайте небольшие вспомогательные функции каррирования с выводом типов.
«Rest-элементы кортежей и типы каррирования» — бесплатный урок TypeScript Academy на CoddyKit. Это урок 1 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения TypeScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс TypeScript Academy содержит 3 уроков всего.
Введение
Цель: захватывать списки аргументов с помощью кортежей переменной длины и создавать небольшой, но полезный помощник для каррирования. Благодаря этому ваши APIs остаются гибкими, а типобезопасность сохраняется.
Основы кортежей переменной длины
Шаблон [...A, L]: сначала идут начальные аргументы (кортеж A), затем последний аргумент (L). Это основа вспомогательных средств.
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Помощник каррирования
Небольшой помощник для каррирования: благодаря [...A, L] типы начальных и последних аргументов определяются корректно.
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Общее каррирование из функции
Общее решение: выведите типы начальной части и последнего аргумента из параметров функции, сохранив количество параметров и их типы.
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Составление с кортежами
Поток A → B → C с помощью композиции: аргументы кортежа A сохраняются, а типы результатов последовательно передаются дальше.
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Советы
Советы:
Кортежи переменной длины требуют TS 4.0 и выше; поддерживайте целевую версию актуальной.
Подсказывайте компилятору: иногда вывод типов улучшается, если явно записать параметры типов.
Излишняя сложность увеличивает трудоёмкость проектирования API; наиболее эффективны простые вспомогательные средства.
Проверка сигнатуры каррирования
Быстрая проверка: какая сигнатура захватывает любые аргументы A и последний аргумент L для помощника каррирования?
Итоги
Итоги: моделируйте списки аргументов с помощью [...A, L]; создавайте небольшие помощники для каррирования и композиции; типы сохраняются автоматически.
Часто задаваемые вопросы
Урок «Rest-элементы кортежей и типы каррирования» бесплатный?
Да — полный текст урока «Rest-элементы кортежей и типы каррирования» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс TypeScript Academy, подпишись на CoddyKit PRO. Курс TypeScript Academy содержит 3 уроков всего.
Чему я научусь в уроке «Rest-элементы кортежей и типы каррирования»?
Используйте rest-элементы кортежей для сбора произвольных списков аргументов и создавайте небольшие вспомогательные функции каррирования с выводом типов. Ты практикуешь TypeScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать TypeScript Academy?
Предыдущий опыт не требуется. TypeScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 3.
Сколько времени занимает урок «Rest-элементы кортежей и типы каррирования»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке TypeScript Academy?
Да. Каждый урок TypeScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Rest-элементы кортежей и типы каррирования
- Безопасная композиция функций и аргументов
- Построители со строгой типизацией