类型与数据
Type 模块 提供了精准的类型判断以及针对 JavaScript 四大基础数据类型(Number, String, Array, Object)的增强操作库。
它不仅弥补了原生 typeof 的不足,还封装了深度克隆、深度合并、随机数据生成等高频业务逻辑。
引入方式
javascript
import { tType, tNum, tStr, tArr, tObj } from "@techui/utils";类型识别
tType(data) 是一个精准的类型判断函数,它基于 Object.prototype.toString 实现,解决了 typeof null === 'object' 等原生缺陷。
- 返回: 小写类型字符串 (如
'string','number','array','object','date','regexp')。
javascript
tType([]); // "array"
tType(null); // "null"
tType(new Date()); // "date"数字工具
tNum 提供了数字校验、随机数生成和格式化功能。
校验与判断
- verify(num): 判断是否为数字类型。
- isNEG0(num): 判断是否 ≥ 0 (Equal Greater 0)。
- isNG0(num): 判断是否 > 0 (Greater 0)。
- isValidNumber(str): 判断字符串是否为有效数字(支持小数)。
- isNumberWithCommas(str): 判断是否为带千分位的数字格式(如
1,234.56)。
随机与计算
- rdm(min, max): 生成指定范围内的随机整数。
- safeFixed(num, decimal): 安全的四舍五入保留小数(修复了 JS 浮点数精度问题)。
javascript
const money = tNum.safeFixed(0.1 + 0.2, 1); // 0.3
const randomScore = tNum.rdm(60, 100);转换与格式化
- convert(str, precision): 安全地将字符串转为数字。
- 返回
{ success: boolean, num?: number, error?: string }结构,不会抛出异常。
- 返回
- padZero(val, len): 数字补零(如
5->"5.00")。
javascript
const res = tNum.convert("12.345", 2);
if (res.success) {
console.log(res.num); // 12.35
}字符串工具
tStr 专注于字符串的生成与大小写转换。
- rdm(len): 生成指定长度的随机字符串(排除了易混淆字符如
I, l, 1, O, 0),常用于生成临时 ID 或验证码。 - upper1st(str): 首字母大写。
javascript
const id = tStr.rdm(8); // "aBcdEfGh"
const title = tStr.upper1st("techUI"); // "TechUI"数组工具
tArr 提供了数组的校验、比较与随机抽取。
字段校验 (Field Validation)
fieldValid(arr, fields): 检查数组中的对象是否包含指定字段。 这在处理 API 返回列表数据时非常有用,能快速定位缺损数据。
javascript
const users = [{ id: 1, name: 'A' }, { id: 2 }]; // 第二项缺失 name
const check = tArr.fieldValid(users, ['id', 'name']);
if (!check.valid) {
console.error(check.message);
// "Item at index 1 is missing field "name"..."
}其他方法
- rdmpk1(arr): 随机从数组中抽取一项 (Random Pick 1)。
- shallowEQ(arr1, arr2): 数组浅比较。用于判断两个简单数组的内容是否一致。
对象工具
tObj 是处理复杂业务逻辑的核心,涵盖了深拷贝、深合并及键值校验。
深度操作 (Deep Ops)
- dpc(obj): 深度克隆 (Deep Clone)。基于 JSON 实现,适合无函数/正则的纯数据对象。
- dpm(target, merged): 深度合并 (Deep Merge)。递归合并两个对象,用于处理配置项覆盖。
- isEq(val1, val2): 深度相等判断。支持对象、数组、日期、正则的递归比较。
javascript
const defaultCfg = { theme: { color: 'red', size: 10 } };
const userCfg = { theme: { color: 'blue' } };
// 深度合并:保留了 size: 10
const finalCfg = tObj.dpm(defaultCfg, userCfg);
// { theme: { color: 'blue', size: 10 } }键值校验
keyValid(obj, keys, all): 检查对象是否包含指定键。
all=true: 必须包含所有指定键。all=false: 包含任意一个指定键即可。
javascript
const params = { keyword: 'test', page: 1 };
const valid = tObj.keyValid(params, ['keyword', 'page'], true);辅助方法
- isEmpty(obj): 判断对象是否为空
{}。 - pick(obj, keys): 提取对象中的指定字段,返回新对象。
- remKey(obj, keyOrKeys): 移除对象中的指定字段,返回新对象(不修改原对象)。