Core Docs
@skyroc/utils

概述

平台无关工具函数集合,提供日期、存储、加密、ID 生成、数组、对象、路径与 query 工具,附带 path / web 子路径

概述

@skyroc/utils 是项目的通用工具包,分为三个入口:

入口导入路径适用环境
主入口@skyroc/utils平台无关(Node.js / 浏览器 / SSR 均可)
Path 子路径@skyroc/utils/path路径工具的独立子路径;常规使用可直接从主入口导入
Web 子路径@skyroc/utils/web仅浏览器环境

模块一览

模块主要导出说明
cncnTailwind class 合并
CryptoCryptoAES 对称加密
nanoidnanoid唯一 ID 生成
klonajsonCloneJSON 安全深拷贝
storagecreateStorage, createLocalforage类型安全存储封装
dateformatDate, addDate 等 20+ 函数分层日期工具
arraytoArray, arraysEqual数组工具
regREG_USER_NAME 等 7 个正则常用校验正则
objectshallowEqual, diffObject对象比较与 diff
utilsisNil, isMacOs基础类型判断与环境检测
pathdeepGet, deepSet, deepUnset, unflatten深层路径读写与字段路径工具
queryparseQuery, stringifyQueryURL query 字符串解析与序列化
radash全部 radash 导出函数式工具(re-export)→ radash 文档

以下模块有独立文档页,本页仅覆盖 cnnanoidjsonCloneobjectradash 这几个相对轻量的模块。


cn — Tailwind class 合并

import { cn } from '@skyroc/utils';

组合 clsxtailwind-merge:先用 clsx 处理条件 class,再用 twMerge 解决 Tailwind 工具类冲突。

cn('px-4 py-2', 'px-6');
// 'py-2 px-6'(px-4 被 px-6 覆盖)

cn('text-red-500', { 'font-bold': true, 'text-blue-500': false });
// 'text-red-500 font-bold'

cn('base-class', condition && 'extra-class', ['array-class']);
// 同 clsx 的所有参数形式均支持

nanoid — 唯一 ID 生成

import { nanoid } from '@skyroc/utils';

直接 re-export 自 nanoid,生成 URL 安全的随机唯一字符串,默认 21 位。

nanoid();      // 'V1StGXR8_Z5jdHi6B-myT'
nanoid(10);    // 'IRFa-VaY2b'(指定长度)

jsonClone — JSON 安全深拷贝

import { jsonClone } from '@skyroc/utils';

来自 klona/json 的快速深拷贝,基于 JSON 序列化实现。

限制: 仅支持 JSON 可序列化的类型,DateMapSetFunctionundefined 等会丢失或变形。

const original = { a: 1, b: { c: [2, 3] } };
const clone = jsonClone(original);

clone.b.c.push(4);
console.log(original.b.c); // [2, 3](不受影响)

object — 对象工具

import { shallowEqual, diffObject, isObjectType, isEventObject } from '@skyroc/utils';

shallowEqual(a, b)boolean

浅比较两个对象:先用 Object.is 判断引用,再逐键用 Object.is 比较一级属性值。

shallowEqual({ a: 1, b: 2 }, { a: 1, b: 2 }); // true
shallowEqual({ a: 1, b: { c: 3 } }, { a: 1, b: { c: 3 } }); // false(嵌套对象引用不同)

diffObject<T>(obj1, obj2)Partial<T>

递归计算两个对象的差异,返回 obj2 中与 obj1 不同的部分。命名为 diffObject 以与 radash 的数组 diff 区分。

diffObject({ name: 'Alice', age: 30 }, { name: 'Alice', age: 31 });
// { age: 31 }

isObjectType(value)value is object

判断值的 typeof 是否为 'object'(含 null)。

isEventObject(event)event is Event

判断值是否为 Event 对象(非数组、非 null、非 Date 的普通对象)。


radash — 函数式工具集

import { group, unique, omit, pick, diff, ... } from '@skyroc/utils';

@skyroc/utils 完整 re-export radash 的所有导出,可直接从 @skyroc/utils 导入,无需单独安装 radash

注意:radash 的 diff数组差集工具(返回第一个数组中不在第二个数组里的元素),本包的对象递归比较函数已重命名为 diffObject 以避免歧义。

常用函数(节选):

函数说明
diff(array1, array2)数组差集,返回 array1 中不在 array2 里的元素
group(list, fn)按 fn 结果分组,返回 Record<key, T[]>
unique(list, fn?)数组去重,支持自定义 key
omit(obj, keys)从对象中排除指定 key
pick(obj, keys)从对象中选取指定 key
alphabetical(list, fn)按字母顺序排序
cluster(list, size)将数组分割为指定大小的分组
sleep(ms)Promise 版 setTimeout
retry(fn, options)带重试的异步函数执行

完整 API 列表见 radash 官方文档 →

On this page