Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | 3x 28x 3x 3x 3x 3x | /**
* 고유 ID 생성 함수
* @returns 고유 ID 문자열
*/
export function generateId(): string {
return `${Date.now().toString(36)}-${Math.random()
.toString(36)
.substring(2, 9)}`;
}
/**
* 비동기 딜레이 함수
* @param ms 지연 시간 (밀리초)
* @returns Promise
*/
export function delay(ms: number): Promise<void> {
return new Promise((resolve) => setTimeout(resolve, ms));
}
/**
* 객체 깊은 복사 함수
* @param obj 복사할 객체
* @returns 복사된 객체
*/
export function deepCopy<T>(obj: T): T {
Iif (obj === null || typeof obj !== "object") {
return obj;
}
Iif (Array.isArray(obj)) {
return obj.map((item) => deepCopy(item)) as unknown as T;
}
const copied: Record<string, any> = {};
Object.keys(obj as Record<string, any>).forEach((key) => {
copied[key] = deepCopy((obj as Record<string, any>)[key]);
});
return copied as T;
}
/**
* 현재 시간 타임스탬프(밀리초) 반환 함수
* @returns 현재 시간 타임스탬프
*/
export function now(): number {
return Date.now();
}
/**
* 에러를 문자열로 변환하는 함수
* @param error 에러 객체 또는 문자열
* @returns 에러 문자열
*/
export function errorToString(error: unknown): string {
Iif (error instanceof Error) {
return error.message;
}
return String(error);
}
|