安全地组合函数与参数
在组合函数时保留参数元组和返回类型;编写始终保持类型安全的 pipe/compose 辅助函数。
安全地组合函数与参数 是 CoddyKit 上的免费 TypeScript Academy 课时。 这是第 2 节课,共 3 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 TypeScript Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 TypeScript Academy 课程共包含 3 节课。
简介
目标:在组合函数时不丢失参数信息。可变参数元组让您可以通过组合或 pipe 辅助函数保留完整的参数元组。
- 保留参数数量和名称
- 保持各步骤之间的推断
- 不使用
any,也不使用 casts
基本组合
组合:第一个函数接收所有参数(...args: A),第二个函数使用它的输出;参数数量和类型都会保留。
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 以相反的顺序实现相同的思路;推断流程更加直观。
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: 预先绑定完整参数并生成一个零参数函数;仅用于演示(实际上可以借助参数类型让它更加灵活)。
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,同时保留了参数;整个流程得以建立,并且没有丢失参数数量和类型。
常见问题解答
「安全地组合函数与参数」课时是免费的吗?
是的 — 「安全地组合函数与参数」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 TypeScript Academy 课程的其余内容,请升级到 CoddyKit PRO。 TypeScript Academy 课程共包含 3 节课。
「安全地组合函数与参数」这节课中我会学到什么?
在组合函数时保留参数元组和返回类型;编写始终保持类型安全的 pipe/compose 辅助函数。 你通过在浏览器中直接运行的动手代码来练习 TypeScript Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 TypeScript Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 TypeScript Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 3 节。
「安全地组合函数与参数」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 TypeScript Academy 课中编写并运行代码吗?
能。每节 TypeScript Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 元组剩余元素与柯里化类型
- 安全地组合函数与参数
- 强类型构建器