Remeda:data-first 和 data-last,它全都要

Remeda:data-first 和 data-last,它全都要

Remeda 在 GitHub 拿到了 5368 个 Star。它是一个 TypeScript 工具函数库,做数组和对象的数据处理。和 Lodash、Ramda 同一赛道,但走法不同:同时给你 data-first 和 data-last 两种调用方式,并且 TypeScript 类型精度拉到了函数内部。

1、痛点在哪

用 Lodash 写链式调用,_.chain() 会让 TypeScript 的类型推断打折扣。Ramda 的组合函数写起来有门槛,团队里不是每个人都能接受。你装了类型补丁包 @types/lodash,偶尔还是会发现某个函数的返回值类型写成了 any

这些不是大问题,但积累多了以后,重构时不敢信任类型系统。Remeda 就是从这道缺口切进去的。

2、两种调用方式,一个函数

data-first 是数据在前:filter(array, fn)。data-last 是数据在后:filter(fn)(array)

前者写起来直接,后者在管道组合里顺手。Lodash 只有 data-first,Ramda 只有 data-last。Remeda 把两种放到同一个函数里,参数顺序决定调用方式,不用在两种风格之间做选择。

3、TypeScript 类型精度

Remeda 的类型定义不在 DefinitelyTyped 包里,直接写在源码每个函数上。pick(obj, ["a", "b"]) 返回的类型,字段只有 ab,类型分别对应 obj 里的字段类型。groupBy 的分组结果,key 的类型跟你传入的分类函数走。

这对改了数据结构后的重构很有用。类型报错不是指个大致范围,是精确到某个字段所在的那一行。

4、延迟计算

pipepiped 内置了延迟计算。你在 pipe 里组合 mapfiltertake(3),Remeda 不会先把整个数组 map 完、再 filter 完、最后取前三条。它每一步只处理当前元素,遇到 take(3) 凑齐数量就停。数据量大的时候,性能差异能实测出来。

5、Tree-shaking 和模块支持

Remeda 支持 Tree-shaking,打包工具能剔除未使用的函数。提供 ESM 和 CJS 两种格式,Deno 也能通过 JSR 直接安装。

6、代码示例

安装:

bash 复制代码
npm install remeda

使用:

js 复制代码
import { pipe, unique, take } from "remeda";

pipe(
  [1, 2, 2, 3, 3, 4, 5, 6],
  unique(),
  take(3),
); // => [1, 2, 3]

pipe 串联操作的思路:数据从左进,经每一步处理,从右出结果。中间每一步的类型都保持准确。

7、从 Lodash 和 Ramda 迁移

Remeda 官网给出了迁移指南,列出 Lodash 或 Ramda 里每个函数映射到 Remeda 的对应函数,以及类型行为的差异点。如果你有这个想法,路径是通的。

8、适合哪些场景

  • TypeScript 项目,团队对类型精度有要求,不想在工具函数层出现 any
  • 新项目选栈,不想带 Lodash 的体积,也不愿全转向 Ramda 的函数式范式。
  • 已有 Lodash 的项目,考虑逐步替换部分函数。

Remeda 做的事:把数据处理函数的类型安全做到位,把两种调用风格统一在一套 API 里,体积控制在低量级。如果这些正好是你选工具库时关心的点,可以试一下。

相关推荐
在水一缸3 小时前
从“反向技能“到协作革命:当开源重新定义AI编程助手
开源·github·ai编程·开发者工具·ai编程助手·ai协作·claude cowork
用户526835677904 小时前
存储运维实战:基于 Ceph Event 监听与 Python 适配器的分布式存储健康度物理声光响应架构
github
dong_junshuai4 小时前
每天一个开源项目#58 DwarfStar:2万星原生引擎,让DeepSeek V4跑在Mac上
github
ZeroNews内网穿透6 小时前
无公网 IP 打通 CI/CD:内网穿透对接 GitHub Actions 自动部署内网服务
运维·tcp/ip·ci/cd·github·远程工作·内网穿透
维基框架16 小时前
GitHub源码处理提速 一趟扫描反而更慢
人工智能·github
徐小夕17 小时前
开源!我用SQLite + DuckDB打造了一款可视化AI问数平台
前端·算法·github
码流怪侠21 小时前
SuperAGI 技术深度解析:开发者优先的开源自主 AI Agent 框架
github·agent
dong_junshuai21 小时前
每天一个开源项目#19 多源数据自动报告生成框架
github
vance041 天前
免费Cloudflare隧道隐藏公网IP
linux·tcp/ip·github
dong_junshuai1 天前
每天一个开源项目#56 reverse-skill:11K Stars 的安全 Agent 路由器
github