Безопасная композиция функций и аргументов
Комбинируйте функции, сохраняя кортежи аргументов и возвращаемые типы; пишите типобезопасные вспомогательные функции 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 — локальная установка не требуется.
Все уроки этого курса
- Rest-элементы кортежей и типы каррирования
- Безопасная композиция функций и аргументов
- Построители со строгой типизацией