恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

es-toolkit compat 版 partialRight 完全指南:从右侧预填参数,实现函数柯里化的反向技巧

  • 首页
  • 资讯中心
  • /
  • es-toolkit compat 版 partialRight 完全指南:从右侧预填参数,实现函数柯里化的反向技巧

相关资讯

Pocket TTS 17个社区应用项目大全:从macOS App到Deno服务器的创意清单 2026/9/15 20:06:29
Wasp 0.17 接入 Discord 社交登录:从开发者应用创建到 OAuth 回调的完整实战 2026/9/15 20:06:29
TensorZero Helm Chart 发布指南:从 CI 自动发布到 ArtifactHub 与 values 模式校验 2026/9/15 20:06:29

最新资讯

PLM系统是什么?产品生命周期管理核心功能与实施避坑指南
Seerr Discord 通知配置完全指南:Webhook、角色提及与多语言通知
CUDA Driver API 矩阵乘法实战:从 fatbin 模块加载到 cuLaunchKernel 的完整驱动式编程指南
Cilium 依赖的 Azure Network SDK(armnetwork v11)演进全解析:CHANGELOG 到源码的对照指南
AI-Scientist 如何用 --parallel 与 --gpus 在多 GPU 上并行执行多个想法实验
基于UDS协议的LIN总线OTA升级实战指南

今日推荐

GDPR下大数据架构重构与隐私保护实践
多组学数据平台架构设计与优化实践
企业主数据管理系统架构设计与实施全解析

本周热门

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化
Flutter应用改名全指南:从Android到iOS的配置与工具实践

本月精选

自研推理加速器Redwood:两周内实现PyTorch模型高效部署的实战教程
V4L2摄像头采集实战:从camera_client.rar到出图全流程解析
从“谁发明了钢琴键”到知识问答智能体:RAG与记忆工程实践

es-toolkit compat 版 partialRight 完全指南:从右侧预填参数,实现函数柯里化的反向技巧

发布时间:2026/9/15 20:11:29
es-toolkit compat 版 partialRight 完全指南:从右侧预填参数,实现函数柯里化的反向技巧 es-toolkit compat 版 partialRight 完全指南从右侧预填参数实现函数柯里化的反向技巧【免费下载链接】es-toolkitA modern JavaScript utility library thats 2-3 times faster and up to 97% smaller, a major upgrade to lodash.项目地址: https://gitcode.com/GitHub_Trending/es/es-toolkitpartialRight是 es-toolkit 的 Lodash 兼容包es-toolkit/compat中提供的一个函数式工具它从右侧开始为原函数预填参数生成一个新函数非常适合固定末尾参数、动态变化前置参数的调用场景。本文将带你掌握它的导入方式、占位符用法、与原生版partialRight的取舍并从源码层面剖析其参数替换算法与边界行为帮助你在实际项目中正确、高效地使用它。一、partialRight 是什么与 partial 的镜像关系partialRight(func, ...args)的作用是创建一个偏函数partially applied function从右侧预填参数。它与常见的partial恰好互补partial把预填参数放在调用参数的前面而partialRight把预填参数追加在调用参数的后面因此特别适合参数顺序敏感、末尾参数固定的场景。const partialFunc partialRight(func, ...args);核心思想一句话概括调用新函数时传入的参数占据参数列表的前部预填的参数占据参数列表的后部。二、安装与导入partialRight位于 es-toolkit 的兼容层es-toolkit/compat中。安装 es-toolkit 后通过如下方式引入import { partialRight } from es-toolkit/compat;在 es-toolkit 的仓库结构中兼容层的导出入口定义在 src/compat/compat.ts其中通过export { partialRight } from ./function/partialRight.ts将兼容实现对外暴露。三、基本用法partialRight(func, ...args)当你希望从右侧预填参数时使用partialRight。在参数顺序很重要的场景下它主要用于固定最后的几个参数。import { partialRight } from es-toolkit/compat; // 基本用法 function greet(greeting, name, punctuation) { return ${greeting} ${name}${punctuation}; } // 预填最后一个参数 const greetWithExclamation partialRight(greet, !); greetWithExclamation(Hello, Alice); // Hello Alice! // 预填多个参数 const sayHiToAlice partialRight(greet, Alice, !); sayHiToAlice(Hi); // Hi Alice! // 使用占位符控制参数顺序 const greetAliceWithCustom partialRight(greet, Alice, partialRight.placeholder); greetAliceWithCustom(Hello, ?); // Hello Alice?从上面的第三个例子可以看到当预填参数中出现partialRight.placeholder时调用时传入的参数会按顺序替换掉占位符位置从而实现在中间某个位置动态传入参数。参数Parameters参数类型说明funcFunction要进行部分应用partial apply的原函数...argsany[]从右侧预填的参数使用partialRight.placeholder可以控制参数插入顺序返回值ReturnsFunction返回一个从右侧预填了参数的新函数。新函数被调用时调用方传入的参数会排在前面预填参数排在后面共同构成对原函数的完整调用。四、占位符 partialRight.placeholder占位符是partialRight最灵活也最容易忽略的特性。它的作用是在预填参数列表中挖一个坑等待调用时传入的真实参数来填。import { partialRight } from es-toolkit/compat; // 固定 Alice 与 !但允许调用时动态传入 greeting const greetAliceWithCustom partialRight(greet, Alice, partialRight.placeholder); greetAliceWithCustom(Hello, ?); // Hello Alice?在源码层面占位符被定义为一个唯一的 Symbol 值partialRight.placeholder Symbol(compat.partialRight.placeholder) as Placeholder;这段代码位于 src/compat/function/partialRight.ts。使用 Symbol 作为占位符可以保证只要传入的参数不是这个精确的 Symbol 引用就不会与普通参数发生冲突。需要特别说明的是compat 版的占位符类型被设计为symbol | ((value: any) any) { partialRight: typeof partialRight }即它同时兼容了Toolkit函数对象类型。这是因为在 compat 层中占位符与 es-toolkit 的Toolkit迭代器函数共用类型定义见 src/compat/toolkit.ts这也是导致其类型系统远比原生版复杂的原因之一。五、官方提醒优先使用 es-toolkit 原生 partialRight这是该文档中最重要的一条工程建议值得单独强调警告由于存在大量函数重载overloads与联合类型union type处理compat 版partialRight是低效的inefficient。在绝大多数情况下它都可以被一个更简单的箭头函数替代。请改用 es-toolkit 自带、更快且更现代的partialRight。这句话有两层含义性能层面compat 版为了兼容 Lodash 的行为签名在类型定义上堆砌了数十个重载从无参数到四参数、再到各种占位符组合运行时类型体操的成本更高。代码简洁层面在大多数业务场景下根本不需要引入偏函数工具一个箭头函数即可表达同样的意图// 使用箭头函数替代 partialRight推荐 const greetWithExclamation (greeting, name) greet(greeting, name, !); const sayHiToAlice greeting greet(greeting, Alice, !);这是官方文档明确的推荐做法能用箭头函数表达清楚就不要引入 partialRight 的开销。如果你确实需要偏函数能力优先从es-toolkit/function导入原生版本其使用方式如下完整文档见 docs/reference/function/partialRight.mdimport { partialRight } from es-toolkit/function; function subtract(a: number, b: number, c: number) { return a - b - c; } const subtractFrom10And5 partialRight(subtract, 5, 2); console.log(subtractFrom10And5(10)); // 10 - 5 - 2 3原生版实现位于 src/function/partialRight.ts并通过 src/function/index.ts 对外导出。六、源码级原理partialRightImpl 的占位符替换算法compat 版在运行时实现上并没有另起炉灶而是直接复用了原生版的核心逻辑partialRightImpl。查看 src/compat/function/partialRight.ts 可以看到compat 版只是把占位符换成自己的Symbol(compat.partialRight.placeholder)然后委托给原生实现return partialRightImplF, Placeholder(func, partialRight.placeholder, ...partialArgs);真正的算法位于 src/function/partialRight.ts其核心思路可以拆解为三步统计占位符数量partialArgs.filter(arg arg placeholder).length算出预填参数里有多少个坑。切分调用参数providedArgs.slice(0, rangeLength)其中rangeLength Math.max(providedArgs.length - placeholderLength, 0)。也就是说调用方传入的参数先喂饱所有占位符剩余部分作为前缀参数排在前面。替换占位符遍历预填参数列表遇到占位符就从调用参数中依次取出一个真实值填入非占位符参数保持不变。最终通过func.apply(this, remainingArgs.concat(substitutedArgs))完成对原函数的调用。此外实现还做了两件关键的兼容性工作原型链继承if (func.prototype) { partialedRight.prototype Object.create(func.prototype); }保证生成的新函数可以用new调用且实例仍然instanceof原函数。不设置 length 属性生成的函数length恒为 0注释中明确说明This method doesnt set the length property避免外部代码依赖函数的参数个数。七、测试验证边界行为一览仓库在 src/compat/function/partialRight.spec.ts 中提供了覆盖完善的测试用例可以帮助我们确认上述行为基础偏应用partialRight(identity, a)()返回a对双参数函数partialRight(fn, a)(b)得到[b, a]验证了调用参数在前、预填参数在后的顺序。无预填参数不传预填参数时新函数行为与原函数基本一致。占位符行为partialRight(fn, placeholder, b, placeholder)调用(a, c)得到[a, b, c]调用(a)得到[a, b, undefined]不传参得到[undefined, b, undefined]——这说明占位符没有足够的参数填充时会以undefined兜底。length 为 0partialRight(fn, a).length为0。构造函数兼容new par() instanceof Foo为true证明原型链被正确保留。元数据克隆对 partialRight 的返回值再次 partialRight可以连续叠加预填参数par2()得到barney hi。与 curry 协作curry(partialRight(fn, 1), 2)后既能curried(2, 3)调用也能curried(2)(3)分步调用。实际应用模式partialRight(mergeWith, deep)可构造出深度 defaults 合并函数这展示了 partialRight 在固定回调参数上的典型用途。原生版 src/function/partialRight.spec.ts 中的用例与 compat 版基本对应进一步印证了二者共享同一套运行时实现。八、适用场景与最佳实践小结综合文档、源码与测试使用partialRight时建议遵循以下原则优先箭头函数若只是固定一两个末尾参数直接用箭头函数包裹即可可读性更好、零运行时开销。需要占位符时再考虑 partialRight当需要固定中间或末尾的多个参数、同时保留中间空位动态传入时partialRight.placeholder是唯一优雅的表达方式。优先原生版确定需要偏函数时从es-toolkit/function导入原生partialRight避免 compat 版大量重载带来的类型与性能开销。仅在 Lodash 迁移场景使用 compat 版如果你正在从 Lodash 平滑迁移、且代码中大量使用_.partialRightes-toolkit/compat版可以提供行为一致的替代品降低迁移成本迁移完成后仍建议逐步替换为箭头函数或原生版。注意 length 语义partialRight 返回的函数length为 0不要依赖其形参个数做逻辑判断。通过本文你已掌握 compat 版partialRight的完整用法、占位符机制、与原生版的差异以及其底层参数替换算法的原理——这些足以支撑你在代码中做出正确、高效的决策。【免费下载链接】es-toolkitA modern JavaScript utility library thats 2-3 times faster and up to 97% smaller, a major upgrade to lodash.项目地址: https://gitcode.com/GitHub_Trending/es/es-toolkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号