function deepClone<T>(value: T): T {
if (Array.isArray(value)) {
return value.map(deepClone) as unknown as T;
} else if (value instanceof Date) {
return new Date(value.getTime()) as unknown as T;
} else if (value instanceof RegExp) {
return new RegExp(value.source, value.flags) as unknown as T;
} else if (typeof value === 'object' && value!== null) {
const result: Record<string, unknown> = {};
for (const key in value) {
if (Object.prototype.hasOwnProperty.call(value, key)) {
result[key] = deepClone((value as Record<string, unknown>)[key]);
}
}
return result as unknown as T;
} else {
return value;
}
}