Skip to content

概览

这个插件提供业务中常用的工具函数集合,所有工具支持按需引用。如果需要更全面的函数式编程工具库,推荐使用 Ramda.js

工具模块

核心模块

业务模块

网络与存储

其他工具

关于 Ramda.js

Ramda.js 是一个实用的 JavaScript 函数式编程库,相比 Lodash 更加轻量且专注于函数式编程范式。

主要特点:

  • 函数式优先 - 所有函数都是自动柯里化的
  • 数据最后 - 参数顺序便于函数组合和管道操作
  • 不可变性 - 不会修改原始数据
  • 纯函数 - 无副作用,相同输入总是得到相同输出

适用场景:

  • 需要复杂的数据转换和处理
  • 函数式编程风格的项目
  • 需要大量函数组合和管道操作
  • 对代码可测试性和可维护性要求较高

使用示例:

javascript
import * as R from 'ramda';

// 函数组合示例
const processData = R.pipe(
  R.filter(R.propEq('active', true)),
  R.map(R.pick(['id', 'name'])),
  R.sortBy(R.prop('name'))
);

// 柯里化应用
const add = R.add;
const add10 = add(10);
add10(5); // 15

何时使用 @pt/utils vs Ramda.js:

  • @pt/utils - 业务常用场景,开箱即用,无需学习成本
  • Ramda.js - 复杂数据处理,函数式编程,需要更强大的工具链

其他场景推荐工具库

根据不同的业务场景,以下是一些高质量、轻量、现代的 JavaScript/TypeScript 工具库推荐:

🕒 时间处理

date-fns ⭐ 推荐首选

特点:

  • 模块化设计,支持按需引入
  • Tree-shaking 友好,只打包使用的函数
  • 纯函数实现,完全支持 TypeScript
  • 体积小巧,性能优异

使用示例:

javascript
import { format, addDays, subMonths, isAfter } from 'date-fns';

// 日期格式化
format(new Date(), 'yyyy-MM-dd HH:mm:ss');

// 日期计算
const threeDaysLater = addDays(new Date(), 3);
const lastMonth = subMonths(new Date(), 1);

// 日期比较
isAfter(new Date(), lastMonth); // true

dayjs

特点:

  • API 类似 Moment.js,但体积仅 2KB
  • 插件化架构,按需加载功能
  • 适合需要 Moment 风格但追求轻量的项目

使用示例:

javascript
import dayjs from 'dayjs';
import relativeTime from 'dayjs/plugin/relativeTime';
import 'dayjs/locale/zh-cn';

dayjs.extend(relativeTime);
dayjs.locale('zh-cn');

dayjs().format('YYYY-MM-DD');
dayjs().add(1, 'day').format('YYYY-MM-DD');
dayjs().fromNow(); // "几秒前"

注意

Moment.js 已进入维护模式,不建议在新项目中使用。

🧮 数学计算

mathjs

特点:

  • 支持表达式解析和求值
  • 支持大数、复数、矩阵运算
  • 支持单位换算和符号计算
  • 适用于计算器、公式引擎、科学应用

使用示例:

javascript
import { evaluate, parse, derivative } from 'mathjs';

// 表达式求值
evaluate('sqrt(16) + sin(pi / 2)'); // 5

// 单位换算
evaluate('5 inch to cm'); // 12.7 cm

// 符号计算
derivative('x^2 + 3x', 'x'); // 2*x + 3

decimal.js / big.js

用途: 高精度浮点运算,避免 JavaScript 精度问题

使用示例:

javascript
import Decimal from 'decimal.js';

// 避免精度问题
new Decimal(0.1).plus(0.2).toString(); // "0.3"

// 金融计算
new Decimal(100.05).times(1.1).toFixed(2); // "110.06"

📊 按场景推荐组合

场景推荐库
函数式编程Ramda / remeda
日期处理date-fns(首选) / dayjs
数学公式mathjs(复杂) / decimal.js(精度)
数据校验Zod
不可变更新Immer
通用工具Radash(现代) / 原生 JS(简单场景)

提示

如果你需要针对特定项目类型(如:React 后台系统、Node.js API、数据可视化等)的更精准建议,请参考各库的官方文档或社区最佳实践。

Released under the MIT License.