0Pricing
TypeScript Academy · 课时

元组剩余元素与柯里化类型

使用元组剩余元素捕获任意参数列表,并借助类型推断构建简洁的柯里化辅助函数。

元组剩余元素与柯里化类型 是 CoddyKit 上的免费 TypeScript Academy 课时。 这是第 1 节课,共 3 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 TypeScript Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 TypeScript Academy 课程共包含 3 节课。

简介

目标:使用可变参数元组捕获参数列表,并编写一个小巧但实用的curry辅助函数。这样一来,您的应用程序接口可以保持灵活,同时保留类型安全性。

可变参数基础

[...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

柯里化辅助函数

一个小型的 curry 实现:借助 [...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

通用 curryFromFn

通用解决方案:从函数参数类型中推断尾部和最后一个参数,从而保留参数数量及其类型。

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 及更高版本;请保持目标环境更新。

为编译器提供提示:有时显式写出类型参数可以改善推断。

过度追求通用性会增加应用程序接口设计的复杂度;简单的辅助工具最有效。

柯里化签名检查

快速检查:哪个签名可以为柯里化辅助函数捕获任意参数 A 和最后一个参数 L?

回顾

回顾: 使用 [...A, L] 表示参数列表;编写小型的 curry 和 pipeMake 辅助函数;类型会自动保留。

常见问题解答

「元组剩余元素与柯里化类型」课时是免费的吗?

是的 — 「元组剩余元素与柯里化类型」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 TypeScript Academy 课程的其余内容,请升级到 CoddyKit PRO。 TypeScript Academy 课程共包含 3 节课。

「元组剩余元素与柯里化类型」这节课中我会学到什么?

使用元组剩余元素捕获任意参数列表,并借助类型推断构建简洁的柯里化辅助函数。 你通过在浏览器中直接运行的动手代码来练习 TypeScript Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 TypeScript Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 TypeScript Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 3 节。

「元组剩余元素与柯里化类型」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 TypeScript Academy 课中编写并运行代码吗?

能。每节 TypeScript Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 元组剩余元素与柯里化类型
  2. 安全地组合函数与参数
  3. 强类型构建器
← 返回 TypeScript Academy