Skip to content

类型与数据

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): 移除对象中的指定字段,返回新对象(不修改原对象)。