UNPKG

ts-npm-init

Version:

创建TypeScript NPM库的现代化模板

165 lines (142 loc) 4.3 kB
/** * NPM包入口文件 * 展示如何导入和使用CSS/SCSS */ // 导入样式文件 import './styles/style.css'; import './styles/style.scss'; /** * 简单工具类 * 这只是一个示例类,开发时请替换为您自己的实现 */ export class Utils { /** * 检查一个值是否为空 * @param value 要检查的值 * @returns 如果值为null、undefined、空字符串、空数组或空对象则返回true */ static isEmpty(value: any): boolean { if (value === null || value === undefined) { return true; } if (typeof value === 'string' && value.trim() === '') { return true; } if (Array.isArray(value) && value.length === 0) { return true; } if (value instanceof Object && Object.keys(value).length === 0) { return true; } return false; } /** * 格式化日期 * @param date 日期对象或时间戳 * @param format 格式化字符串, 默认为 'YYYY-MM-DD HH:mm:ss' * @returns 格式化后的日期字符串 */ static formatDate(date: Date | number | string, format: string = 'YYYY-MM-DD HH:mm:ss'): string { const d = typeof date === 'object' ? date : new Date(date); const formatObj: { [key: string]: string } = { 'Y+': d.getFullYear().toString(), 'M+': (d.getMonth() + 1).toString(), 'D+': d.getDate().toString(), 'H+': d.getHours().toString(), 'm+': d.getMinutes().toString(), 's+': d.getSeconds().toString(), 'q+': Math.floor((d.getMonth() + 3) / 3).toString(), 'S': d.getMilliseconds().toString() }; let result = format; for (const key in formatObj) { if (new RegExp(`(${key})`).test(format)) { const value = formatObj[key]; result = result.replace(RegExp.$1, RegExp.$1.length === 1 ? value : value.padStart(RegExp.$1.length, '0')); } } return result; } /** * 深拷贝对象 * @param obj 要拷贝的对象 * @returns 拷贝后的新对象 */ static deepClone<T>(obj: T): T { if (obj === null || typeof obj !== 'object') { return obj; } if (Array.isArray(obj)) { return obj.map(item => this.deepClone(item)) as unknown as T; } const result = {} as T; for (const key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { result[key] = this.deepClone(obj[key]); } } return result; } /** * 为元素添加样式类 * 这是一个展示如何使用导入的CSS的示例方法 * @param element 目标DOM元素 * @param isScss 是否使用SCSS样式 */ static applyStyles(element: HTMLElement, isScss: boolean = false): void { if (!element) return; if (isScss) { element.classList.add('scss-example'); } else { element.classList.add('example-class'); } } } /** * 字符串工具类 */ export class StringUtils { /** * 将字符串首字母大写 * @param str 输入字符串 * @returns 首字母大写的字符串 */ static capitalize(str: string): string { if (!str || str.length === 0) return str; return str.charAt(0).toUpperCase() + str.slice(1); } /** * 计算字符串长度,汉字算2个字符 * @param str 输入字符串 * @returns 字符串长度 */ static byteLength(str: string): number { if (!str) return 0; let length = 0; for (let i = 0; i < str.length; i++) { const charCode = str.charCodeAt(i); if (charCode >= 0 && charCode <= 128) { length += 1; } else { length += 2; } } return length; } /** * 截取指定长度的字符串,超出部分用省略号替代 * @param str 输入字符串 * @param maxLength 最大长度 * @returns 截取后的字符串 */ static truncate(str: string, maxLength: number): string { if (!str) return ''; if (str.length <= maxLength) return str; return str.substr(0, maxLength) + '...'; } } /** * 这只是一个示例导出 * 开发时请替换为您自己的实际导出 */ export default Utils;