cross-env-plugins
Version:
A cross-environment JavaScript utility library with common tools and validation functions for Web and Node.js
643 lines (582 loc) • 18.9 kB
TypeScript
/**
* 精确加法(解决浮点数精度问题)
* @param a - 加数1
* @param b - 加数2
* @param ...args - 更多加数(可选)
* @returns 精确的加法结果
* 使用示例:
* add(0.1, 0.2); // 0.3
* add(0.1, 0.2, 0.3); // 0.6
*/
declare function add(a: number, b: number, ...args: number[]): number;
/**
* Base64解码
* @param str - Base64编码的字符串
* @returns 解码后的字符串
* 使用示例:
* base64Decode('aGVsbG8='); // 'hello'
*/
declare function base64Decode(str: string): string;
/**
* Base64编码
* @param str - 要编码的字符串
* @returns Base64编码后的字符串
* 使用示例:
* base64Encode('hello'); // 'aGVsbG8='
*/
declare function base64Encode(str: string): string;
/**
* 驼峰命名转换(下划线转驼峰)
* @param str - 下划线命名的字符串
* @returns 驼峰命名的字符串
* 使用示例:
* camelCase('user_name'); // 'userName'
*/
declare function camelCase(str: string): string;
/**
* 首字母大写
* @param str - 字符串
* @returns 首字母大写的字符串
* 使用示例:
* capitalize('hello'); // 'Hello'
*/
declare function capitalize(str: string): string;
/**
* 校验身份证最后一位校验码是否正确
* @param idCard - 18位身份证号
* @returns 返回校验结果
*/
declare function checkCode(idCard: string): boolean;
/**
* 检测密码强度等级
* @param str 密码字符串
* @returns 1:密码弱 2:密码中等 3:密码强 4:密码很强
*/
declare function checkPwd(str: string): number;
/**
* 将15位身份证号转换为18位
* @param idCard15 - 15位身份证号
* @returns 18位身份证号
*/
declare function convertTo18Digits(idCard15: string): string;
/**
* 金额转换为中文大写
* @param num - 要转换的金额
* @returns 中文大写金额
* 使用示例:
* convertToChinese(12345.67); // '壹万贰仟叁佰肆拾伍元陆角柒分'
*/
declare function convertToChinese(num: number): string;
/**
* 防抖函数
* @param fn - 要执行的函数
* @param delay - 等待时间(毫秒)
* @returns 返回防抖处理后的函数
* 使用示例:
* const handleClick = debounce((e) => {
* console.log('按钮点击');
* }, 1000);
*/
declare function debounce<T extends (...args: any[]) => any>(fn: T, delay: number): (...args: Parameters<T>) => void;
/**
* 深拷贝
* @param obj - 要拷贝的对象
* @returns 拷贝后的新对象
* 使用示例:
* const newObj = deepClone(originalObj);
*/
declare function deepClone<T>(obj: T): T;
/**
* 对象深度比较
* @param obj1 - 对象1
* @param obj2 - 对象2
* @returns 是否相等
* 使用示例:
* deepEqual({a: 1, b: {c: 2}}, {a: 1, b: {c: 2}}); // true
*/
declare function deepEqual(obj1: any, obj2: any): boolean;
/**
* 精确除法(解决浮点数精度问题)
* @param a - 被除数
* @param b - 除数
* @param ...args - 更多除数(可选)
* @returns 精确的除法结果
* @throws {Error} 当除数为0时抛出错误
* 使用示例:
* divide(0.3, 0.1); // 3
* divide(0.6, 0.2, 0.3); // 10
*/
declare function divide(a: number, b: number, ...args: number[]): number;
/**
* 数组扁平化
* @param arr - 要扁平化的数组
* @param depth - 扁平化深度,默认为 Infinity
* @returns 扁平化后的数组
* 使用示例:
* flattenArray([1, [2, [3, 4]]]); // [1, 2, 3, 4]
*/
declare function flattenArray<T>(arr: T[], depth?: number): T[];
/**
* 金额格式化
* @param amount - 金额
* @param decimals - 保留的小数位数,默认为 2
* @returns 格式化后的金额字符串
* 使用示例:
* formatCurrency(12345.678); // '12,345.68'
*/
declare function formatCurrency(amount: number | string, decimals?: number): string;
/**
* 格式化文件大小
* @param bytes - 字节数
* @param decimals - 小数位数,默认为 2
* @returns 格式化后的文件大小
* 使用示例:
* formatFileSize(1024); // '1.00 KB'
*/
declare function formatFileSize(bytes: number, decimals?: number): string;
/**
* 格式化数字(添加千分位)
* @param num - 数字
* @returns 格式化后的数字字符串
* 使用示例:
* formatNumber(1234567); // '1,234,567'
*/
declare function formatNumber(num: number | string): string;
/**
* 生成随机验证码
* @param length - 验证码长度,默认为 6
* @returns 随机验证码
* 使用示例:
* generateRandomCode(6); // 'aB1cD2'
*/
declare function generateRandomCode(length?: number): string;
/**
* 生成UUID
* @returns UUID字符串
* 使用示例:
* generateUUID(); // '550e8400-e29b-41d4-a716-446655440000'
*/
declare function generateUUID(): string;
/**
* 获取日期对应的星期几
* @param date - 日期字符串或对象
* @returns 星期几
* 使用示例:
* getDayOfWeek('2023-08-09'); // 'Wednesday'
*/
declare function getDayOfWeek(date: string | Date): string;
/**
* 计算两个日期的差值(天数)
* @param date1 - 日期1
* @param date2 - 日期2
* @returns 相差的天数
* 使用示例:
* getDaysDiff('2024-01-01', '2024-01-10'); // 9
*/
declare function getDaysDiff(date1: string | Date, date2?: string | Date): number;
/**
* 获取相对时间(如:3分钟前、2小时前)
* @param date - 日期
* @returns 相对时间字符串
* 使用示例:
* getRelativeTime(new Date(Date.now() - 3600000)); // '1小时前'
*/
declare function getRelativeTime(date: string | Date): string;
/**
* 计算当前时间距离结束时间的时间戳
* @param endTime - 结束时间字符串或Date对象,支持多种格式
* @param startTime - 开始时间字符串或Date对象,支持多种格式,默认为当前时间
* @returns 距离结束时间的时间戳(毫秒),如果已过期则返回 0
* 使用示例:
* getTimeUntilEnd('2024-9-30 18:00:00'); // 返回距离结束时间的毫秒数
* getTimeUntilEnd('2024-9-30 18:00:00', '2024-9-1 00:00:00'); // 从指定开始时间计算
*/
declare function getTimeUntilEnd(endTime: string | Date, startTime?: string | Date): number;
/**
* 获取值的精确类型(使用 Object.prototype.toString.call)
* @param value - 要检查的值
* @returns 类型字符串(如:'Object', 'Array', 'String', 'Number', 'Boolean', 'Function', 'Date', 'RegExp', 'Null', 'Undefined' 等)
* 使用示例:
* getType([]); // 'Array'
* getType({}); // 'Object'
* getType('hello'); // 'String'
* getType(123); // 'Number'
* getType(true); // 'Boolean'
* getType(null); // 'Null'
* getType(undefined); // 'Undefined'
* getType(new Date()); // 'Date'
* getType(/test/); // 'RegExp'
*/
declare function getType(value: any): string;
/**
* 数组分组
* @param arr - 要分组的数组
* @param key - 分组键(函数或属性名)
* @returns 分组后的对象
* 使用示例:
* groupBy([{type: 'a', value: 1}, {type: 'b', value: 2}], 'type');
*/
declare function groupBy<T>(arr: T[], key: string | ((item: T) => string | number)): Record<string | number, T[]>;
/**
* 校验银行卡号(Luhn算法)
* @param cardNo - 银行卡号
* @returns 返回校验结果
* 使用示例:
* isBankCard('6228480402637874213'); // true
*/
declare function isBankCard(cardNo: string): boolean;
/**
* 校验是否为中文
* @param str - 要校验的字符串
* @returns 返回校验结果
* 使用示例:
* isChinese('你好'); // true
*/
declare function isChinese(str: string): boolean;
/**
* 校验中文姓名
* @param name - 姓名
* @returns 返回校验结果
* 使用示例:
* isChineseName('张三'); // true
*/
declare function isChineseName(name: string): boolean;
/**
* 校验是否为小数
* @param value - 要校验的值
* @returns 返回校验结果
* 使用示例:
* isDecimal('123.45'); // true
* isDecimal(123); // false
*/
declare function isDecimal(value: string | number): boolean;
/**
* 校验邮箱格式
* @param email - 要校验的邮箱
* @returns 返回校验结果
* 使用示例:
* isEmail('example@example.com'); // true
*/
declare function isEmail(email: string): boolean;
/**
* 校验是否为空(null、undefined、空字符串、空数组、空对象)
* @param value - 要校验的值
* @returns 返回校验结果
* 使用示例:
* isEmpty(''); // true
* isEmpty([]); // true
* isEmpty({}); // true
*/
declare function isEmpty(value: any): boolean;
/**
* 校验是否为英文
* @param str - 要校验的字符串
* @returns 返回校验结果
* 使用示例:
* isEnglish('hello'); // true
*/
declare function isEnglish(str: string): boolean;
/**
* 校验是否为整数
* @param value - 要校验的值
* @returns 返回校验结果
* 使用示例:
* isInteger('123'); // true
* isInteger(123.5); // false
*/
declare function isInteger(value: string | number): boolean;
/**
* 校验IP地址格式
* @param ip - 要校验的IP地址
* @returns 返回校验结果
* 使用示例:
* isIP('192.168.1.1'); // true
*/
declare function isIP(ip: string): boolean;
/**
* 校验字符串长度
* @param str - 字符串
* @param min - 最小长度
* @param max - 最大长度
* @returns 返回校验结果
* 使用示例:
* isLength('hello', 3, 10); // true
*/
declare function isLength(str: string, min: number, max: number): boolean;
/**
* 校验车牌号(中国)
* @param plate - 车牌号
* @returns 返回校验结果
* 使用示例:
* isLicensePlate('京A12345'); // true
*/
declare function isLicensePlate(plate: string): boolean;
/**
* 校验手机号格式(中国手机号)
* @param mobile - 要校验的手机号
* @returns 返回校验结果
* 使用示例:
* isMobile('13800138000'); // true
*/
declare function isMobile(mobile: string): boolean;
/**
* 校验是否为非负整数(包括0)
* @param value - 要校验的值
* @returns 返回校验结果
* 使用示例:
* isNonNegativeInteger('0'); // true
*/
declare function isNonNegativeInteger(value: string | number): boolean;
/**
* 校验是否为数字
* @param value - 要校验的值
* @returns 返回校验结果
* 使用示例:
* isNumber('123'); // true
* isNumber(123); // true
*/
declare function isNumber(value: string | number): boolean;
/**
* 校验是否为正整数
* @param value - 要校验的值
* @returns 返回校验结果
* 使用示例:
* isPositiveInteger('123'); // true
*/
declare function isPositiveInteger(value: string | number): boolean;
/**
* 校验邮政编码(中国)
* @param code - 邮政编码
* @returns 返回校验结果
* 使用示例:
* isPostalCode('100000'); // true
*/
declare function isPostalCode(code: string): boolean;
/**
* 判断是否为同一天
* @param date1 - 日期1
* @param date2 - 日期2
* @returns 是否为同一天
* 使用示例:
* isSameDay('2024-01-01', '2024-01-01 12:00:00'); // true
*/
declare function isSameDay(date1: string | Date, date2?: string | Date): boolean;
/**
* 验证值是否为指定类型(使用 Object.prototype.toString.call)
* 支持不区分大小写和简写形式
* @param value - 要验证的值
* @param type - 类型名称(支持:'object', 'array', 'string', 'number', 'boolean', 'function', 'date', 'regexp', 'null', 'undefined', 'symbol', 'promise', 'error' 等,不区分大小写)
* @returns 是否为指定类型
* 使用示例:
* isType('a', 'string'); // true
* isType('a', 'String'); // true
* isType([], 'array'); // true
* isType({}, 'object'); // true
* isType(123, 'number'); // true
* isType(true, 'boolean'); // true
* isType(null, 'null'); // true
* isType(undefined, 'undefined'); // true
* isType(new Date(), 'date'); // true
* isType(/test/, 'regexp'); // true
* isType(() => {}, 'function'); // true
*/
declare function isType(value: any, type: string): boolean;
/**
* 校验统一社会信用代码
* @param code - 统一社会信用代码
* @returns 返回校验结果
* 使用示例:
* isUnifiedSocialCreditCode('911100001000000000'); // true
*/
declare function isUnifiedSocialCreditCode(code: string): boolean;
/**
* 校验URL格式
* @param url - 要校验的URL
* @returns 返回校验结果
* 使用示例:
* isURL('https://www.example.com'); // true
*/
declare function isURL(url: string): boolean;
/**
* 验证日期格式是否正确
* @param date - 日期字符串(格式:YYYYMMDD)
* @returns 返回校验结果
*/
declare function isValidDate(date: string): boolean;
/**
* 对象合并
* @param target - 目标对象
* @param source - 源对象
* @param overwrite - 是否覆盖目标对象中已有的属性,默认为 true
* @returns 合并后的对象
* 使用示例:
* const mergedObj = mergeObjects(targetObj, sourceObj, false);
*/
declare function mergeObjects<T extends Record<string, any>>(target: T, source: Partial<T>, overwrite?: boolean): T;
/**
* 精确乘法(解决浮点数精度问题)
* @param a - 乘数1
* @param b - 乘数2
* @param ...args - 更多乘数(可选)
* @returns 精确的乘法结果
* 使用示例:
* multiply(0.1, 3); // 0.3
* multiply(0.1, 0.2, 0.3); // 0.006
*/
declare function multiply(a: number, b: number, ...args: number[]): number;
/**
* 数组分页
* @param arr - 要分页的数组
* @param page - 页码(从1开始)
* @param pageSize - 每页数量
* @returns 分页后的数组
* 使用示例:
* paginate([1, 2, 3, 4, 5], 1, 2); // [1, 2]
*/
declare function paginate<T>(arr: T[], page?: number, pageSize?: number): T[];
/**
* 下划线命名转换(驼峰转下划线)
* @param str - 驼峰命名的字符串
* @returns 下划线命名的字符串
* 使用示例:
* snakeCase('userName'); // 'user_name'
*/
declare function snakeCase(str: string): string;
/**
* 精确减法(解决浮点数精度问题)
* @param a - 被减数
* @param b - 减数
* @param ...args - 更多减数(可选)
* @returns 精确的减法结果
* 使用示例:
* subtract(0.3, 0.1); // 0.2
* subtract(1.0, 0.1, 0.2); // 0.7
*/
declare function subtract(a: number, b: number, ...args: number[]): number;
/**
* 节流函数
* @param fn - 要执行的函数
* @param delay - 限制时间间隔(毫秒)
* @returns 返回节流处理后的函数
* 使用示例:
* const handleScroll = throttle(() => console.log('Scroll Event'), 200);
*/
declare function throttle<T extends (...args: any[]) => any>(fn: T, delay: number): (...args: Parameters<T>) => void;
/**
* 百分比转换
* @param num - 数字
* @param decimals - 小数位数,默认为 2
* @returns 百分比字符串
* 使用示例:
* toPercent(0.1234); // '12.34%'
*/
declare function toPercent(num: number, decimals?: number): string;
/**
* 字符串截取(支持中文)
* @param str - 字符串
* @param length - 截取长度
* @param suffix - 后缀,默认为 '...'
* @returns 截取后的字符串
* 使用示例:
* truncate('这是一段很长的文字', 5); // '这是一段很...'
*/
declare function truncate(str: string, length: number, suffix?: string): string;
/**
* 数组去重
* @param arr - 要去重的数组
* @returns 去重后的数组
* 使用示例:
* const uniqueArr = uniqueArray([1, 2, 2, 3, 4, 4, 5]); // [1, 2, 3, 4, 5]
*/
declare function uniqueArray<T>(arr: T[]): T[];
/**
* URL解码
* @param str - URL编码的字符串
* @returns 解码后的字符串
* 使用示例:
* urlDecode('hello%20world'); // 'hello world'
*/
declare function urlDecode(str: string): string;
/**
* URL编码
* @param str - 要编码的字符串
* @returns URL编码后的字符串
* 使用示例:
* urlEncode('hello world'); // 'hello%20world'
*/
declare function urlEncode(str: string): string;
export declare const utils: {
random: (min: number, max: number) => number;
formatTime: (date?: string | Date, format?: string) => string;
getDayOfWeek: typeof getDayOfWeek;
getTimeUntilEnd: typeof getTimeUntilEnd;
formatCurrency: typeof formatCurrency;
convertToChinese: typeof convertToChinese;
generateRandomCode: typeof generateRandomCode;
debounce: typeof debounce;
throttle: typeof throttle;
getUrlParam: (name?: string) => string | Record<string, string>;
deepClone: typeof deepClone;
mergeObjects: typeof mergeObjects;
uniqueArray: typeof uniqueArray;
checkPwd: typeof checkPwd;
randomStr: (length?: number) => string;
generateUUID: typeof generateUUID;
capitalize: typeof capitalize;
camelCase: typeof camelCase;
snakeCase: typeof snakeCase;
flattenArray: typeof flattenArray;
groupBy: typeof groupBy;
paginate: typeof paginate;
getRelativeTime: typeof getRelativeTime;
getDaysDiff: typeof getDaysDiff;
isSameDay: typeof isSameDay;
formatFileSize: typeof formatFileSize;
formatNumber: typeof formatNumber;
toPercent: typeof toPercent;
base64Encode: typeof base64Encode;
base64Decode: typeof base64Decode;
urlEncode: typeof urlEncode;
urlDecode: typeof urlDecode;
truncate: typeof truncate;
deepEqual: typeof deepEqual;
getType: typeof getType;
isType: typeof isType;
add: typeof add;
subtract: typeof subtract;
multiply: typeof multiply;
divide: typeof divide;
};
/**
* 身份证校验
* @param idCard - 身份证号(支持15位和18位)
* @returns 返回校验结果
* 使用示例:
* validateIDCard('110101199003075131'); // true
*/
declare function validateIDCard(idCard: string): boolean;
export declare const valids: {
isEmail: typeof isEmail;
isMobile: typeof isMobile;
validateIDCard: typeof validateIDCard;
checkCode: typeof checkCode;
isValidDate: typeof isValidDate;
convertTo18Digits: typeof convertTo18Digits;
isURL: typeof isURL;
isIP: typeof isIP;
isBankCard: typeof isBankCard;
isChineseName: typeof isChineseName;
isPostalCode: typeof isPostalCode;
isLicensePlate: typeof isLicensePlate;
isUnifiedSocialCreditCode: typeof isUnifiedSocialCreditCode;
isNumber: typeof isNumber;
isInteger: typeof isInteger;
isDecimal: typeof isDecimal;
isEmpty: typeof isEmpty;
isLength: typeof isLength;
isPositiveInteger: typeof isPositiveInteger;
isNonNegativeInteger: typeof isNonNegativeInteger;
isChinese: typeof isChinese;
isEnglish: typeof isEnglish;
};
export { }