ts-npm-init
Version:
创建TypeScript NPM库的现代化模板
165 lines (142 loc) • 4.3 kB
text/typescript
/**
* 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;