0Pricing
TypeScript Academy · Урок

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 — локальная установка не требуется.

Все уроки этого курса

  1. Rest-элементы кортежей и типы каррирования
  2. Безопасная композиция функций и аргументов
  3. Построители со строгой типизацией
← Назад к TypeScript Academy