- Updated `generateUUID` function for improved readability and performance. - Deleted `logger.ts`, `other.ts`, `request.ts`, `storage.ts`, `tansParams.ts`, and `validate.ts` as they were no longer needed. - Simplified TypeScript configuration by removing unnecessary paths and aliases. - Enhanced Vite configuration for better project structure and maintainability.
34 lines
766 B
TypeScript
34 lines
766 B
TypeScript
export function debounce<T extends (...args: any[]) => any>(
|
|
fn: T,
|
|
delay: number,
|
|
): (...args: Parameters<T>) => void {
|
|
let timer: NodeJS.Timeout | null = null;
|
|
|
|
return function debounced(this: unknown, ...args: Parameters<T>) {
|
|
if (timer) {
|
|
clearTimeout(timer);
|
|
}
|
|
timer = setTimeout(() => {
|
|
fn.apply(this, args);
|
|
}, delay);
|
|
};
|
|
}
|
|
|
|
export function cloneDeep<T>(obj: T): T {
|
|
if (obj === null || typeof obj !== 'object') {
|
|
return obj;
|
|
}
|
|
|
|
if (Array.isArray(obj)) {
|
|
return obj.map((item) => cloneDeep(item)) as T;
|
|
}
|
|
|
|
const clone = Object.assign({}, obj);
|
|
for (const key in clone) {
|
|
if (Object.prototype.hasOwnProperty.call(clone, key)) {
|
|
clone[key] = cloneDeep(clone[key]);
|
|
}
|
|
}
|
|
return clone;
|
|
}
|