@viso/shared-utils
v0.2.3
Published
一个全面的 JavaScript/TypeScript 工具库,提供各种实用的工具函数,专为现代 Web 开发设计。
Readme
@viso/shared-utils
一个全面的 JavaScript/TypeScript 工具库,提供各种实用的工具函数,专为现代 Web 开发设计。
安装
npm install @viso/shared-utils功能特点
- 🎯 类型安全: 完全基于 TypeScript 实现,提供完整的类型检查和智能提示
- 🔧 工具丰富: 包含字符串、数组、对象、日期、文件等各类工具函数
- 🌐 URL 处理: 强大的 URL 解析和处理功能
- 📅 日期工具: 便捷的日期格式化和处理函数
- 🔍 类型检查: 完善的类型检查和验证函数
- 📁 文件处理: 文件大小、类型检查等实用功能
- 🆔 UUID 生成: UUID 生成和验证工具
- 🎭 事件系统: 轻量级事件发射器
- 🧪 经过测试: 完整的单元测试覆盖,确保稳定性和可靠性
使用方法
字符串工具
import { validURL, getUrlWithParams, getUrlParams } from '@viso/shared-utils'
// URL 验证
const isValid = validURL('https://example.com') // true
// 添加 URL 参数
const urlWithParams = getUrlWithParams('https://api.example.com', {
page: 1,
size: 20
}) // 'https://api.example.com?page=1&size=20'
// 解析 URL 参数
const params = getUrlParams('https://example.com?name=John&age=25')
// { name: 'John', age: '25' }数组工具
import { arrayUtils } from '@viso/shared-utils'
const numbers = [1, 2, 3, 4, 5]
// 数组去重
const unique = arrayUtils.unique([1, 2, 2, 3, 3, 4]) // [1, 2, 3, 4]
// 数组分块
const chunks = arrayUtils.chunk(numbers, 2) // [[1, 2], [3, 4], [5]]
// 数组扁平化
const flattened = arrayUtils.flatten([[1, 2], [3, [4, 5]]]) // [1, 2, 3, 4, 5]对象工具
import { objectUtils } from '@viso/shared-utils'
const obj = { a: 1, b: 2, c: 3 }
// 深拷贝
const cloned = objectUtils.deepClone(obj)
// 对象合并
const merged = objectUtils.merge({ a: 1 }, { b: 2 }, { c: 3 })
// 获取嵌套属性
const value = objectUtils.get(obj, 'nested.property', 'default')类型检查
import { isString, isNumber, isArray, isObject } from '@viso/shared-utils'
function processValue(value: unknown) {
if (isString(value)) {
console.log('字符串:', value.toUpperCase())
} else if (isNumber(value)) {
console.log('数字:', value.toFixed(2))
} else if (isArray(value)) {
console.log('数组长度:', value.length)
} else if (isObject(value)) {
console.log('对象:', Object.keys(value))
}
}日期工具
import { formatDate, parseDate, addDays } from '@viso/shared-utils'
const now = new Date()
// 格式化日期
const formatted = formatDate(now, 'YYYY-MM-DD') // '2024-01-15'
// 解析日期
const parsed = parseDate('2024-01-15', 'YYYY-MM-DD')
// 日期计算
const futureDate = addDays(now, 7) // 7天后的日期文件工具
import { formatFileSize, getFileExtension, validateFileType } from '@viso/shared-utils'
// 文件大小格式化
const size = formatFileSize(1024 * 1024) // '1 MB'
// 获取文件扩展名
const ext = getFileExtension('document.pdf') // 'pdf'
// 验证文件类型
const isImage = validateFileType('image.jpg', ['jpg', 'png', 'gif']) // trueUUID 生成
import { generateUUID, validateUUID } from '@viso/shared-utils'
// 生成 UUID
const id = generateUUID() // 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'
// 验证 UUID
const isValid = validateUUID(id) // true事件发射器
import { createEmitter } from '@viso/shared-utils'
interface Events {
userLogin: { userId: string }
userLogout: void
}
const emitter = createEmitter<Events>()
// 监听事件
emitter.on('userLogin', ({ userId }) => {
console.log('用户登录:', userId)
})
// 触发事件
emitter.emit('userLogin', { userId: '123' })枚举工具
import { enumUtils } from '@viso/shared-utils'
enum Status {
PENDING = 'pending',
APPROVED = 'approved',
REJECTED = 'rejected'
}
// 获取枚举值数组
const values = enumUtils.getValues(Status) // ['pending', 'approved', 'rejected']
// 获取枚举键数组
const keys = enumUtils.getKeys(Status) // ['PENDING', 'APPROVED', 'REJECTED']
// 检查是否为有效的枚举值
const isValid = enumUtils.isValidValue(Status, 'pending') // true模块说明
核心模块
- is: 类型检查和验证函数
- string: 字符串处理工具(URL、格式化等)
- array: 数组操作工具
- object: 对象操作工具
- date: 日期处理工具
- file: 文件处理工具
- uuid: UUID 生成和验证
- emitter: 事件发射器
- enum: 枚举工具
- func: 函数工具
API 参考
字符串工具
validURL(str): 验证是否为有效 URLgetUrlWithParams(url, params): 为 URL 添加查询参数getUrlParams(url): 解析 URL 查询参数getUrlParamValue(name): 获取指定参数值getUrlHash(url): 获取 URL hashgetUrlScheme(url): 获取 URL 协议isURL(url): 判断是否为 URLisNotURL(url): 判断是否不是 URL
数组工具
unique(array): 数组去重chunk(array, size): 数组分块flatten(array): 数组扁平化compact(array): 移除假值intersection(arrays): 数组交集union(arrays): 数组并集
对象工具
deepClone(obj): 深拷贝merge(objects): 对象合并get(obj, path, defaultValue): 获取嵌套属性set(obj, path, value): 设置嵌套属性pick(obj, keys): 选择指定属性omit(obj, keys): 排除指定属性
类型检查
isString(value): 检查是否为字符串isNumber(value): 检查是否为数字isBoolean(value): 检查是否为布尔值isArray(value): 检查是否为数组isObject(value): 检查是否为对象isFunction(value): 检查是否为函数isDate(value): 检查是否为日期对象isRegExp(value): 检查是否为正则表达式