0Pricing
TypeScript Academy · Урок

Безопасная композиция функций и аргументов

Комбинируйте функции, сохраняя кортежи аргументов и возвращаемые типы; пишите типобезопасные вспомогательные функции pipe/compose.

«Безопасная композиция функций и аргументов» — бесплатный урок TypeScript Academy на CoddyKit. Это урок 2 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения TypeScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс TypeScript Academy содержит 3 уроков всего.

Введение

Цель: составлять функции, не теряя сведения об аргументах. Кортежи переменной длины позволяют сохранять полный кортеж аргументов в помощниках pipe и композиции.

  • Сохранять количество аргументов и имена
  • Сохранять вывод типов между шагами
  • Не использовать any и casts

Базовая композиция

Композиция: первая функция принимает все аргументы, вторая использует её результат; количество аргументов и типы сохраняются.

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

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

const c1 = compose(isEven, toLen)
const ok = c1("id", 99)   // boolean

Помощник pipe

pipe реализует ту же идею в обратном порядке; поток вывода типов становится более понятным.

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

const p1 = pipe(toLen, isEven)
const ok2 = p1("xx", 7) // boolean

Композиция из трёх и более функций

Для трёх и более функций повторяется тот же шаблон: кортеж A сохраняется, а промежуточные результаты передаются по цепочке.

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

function toUpper(s: string) { return s.toUpperCase() }

const c3 = compose3(toUpper, (x: number) => x.toString(), toLen)
const val = c3("a", 5) // "2" → then upper → "2"

Связывание начальных аргументов

bindHead: добавляет полный набор начальных аргументов и создаёт функцию без аргументов; только для демонстрации (на самом деле её можно сделать гибче с помощью Parameters).

function bindHead<A extends any[], B>(fn: (...args: A) => B, ...head: A) {
  return (...rest: []): B => fn(...head)
}

const bh = bindHead(toLen, "x", 42)
const r = bh() // number

Советы

Советы:

Избегайте any во вспомогательных средствах: он нарушает цепочку вывода типов.

При необходимости явно указывайте тип результата; это улучшает удобство разработки.

Для многоэтапной композиции выбирайте небольшие вспомогательные средства вместо чрезмерно универсальных.

Проверка сигнатуры композиции

Быстрая проверка: какая сигнатура композиции сохраняет исходный кортеж аргументов?

Итоги

Итоги: создавайте композицию и pipe, сохраняя аргументы с помощью кортежей переменной длины; поток выстраивается без потери количества аргументов и типов.

Часто задаваемые вопросы

Урок «Безопасная композиция функций и аргументов» бесплатный?

Да — полный текст урока «Безопасная композиция функций и аргументов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс TypeScript Academy, подпишись на CoddyKit PRO. Курс TypeScript Academy содержит 3 уроков всего.

Чему я научусь в уроке «Безопасная композиция функций и аргументов»?

Комбинируйте функции, сохраняя кортежи аргументов и возвращаемые типы; пишите типобезопасные вспомогательные функции pipe/compose. Ты практикуешь TypeScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать TypeScript Academy?

Предыдущий опыт не требуется. TypeScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 3.

Сколько времени занимает урок «Безопасная композиция функций и аргументов»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке TypeScript Academy?

Да. Каждый урок TypeScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

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

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