/** 默认 向 storage 存入页面栈的前缀 注意修改这个值对既存数据的影响 */ export const DEFAULT_PAGE_KEY = '__ml::page'; type KeysOfUnion = T extends Record ? keyof T : never; /** 删去对象中 keys */ export function omit>(obj: T, keys: KeysOfUnion[]) { return Object.fromEntries(Object.entries(obj).filter(([k]) => !(keys as unknown as string).includes(k))) as Omit< T, KeysOfUnion >; } /** 将字段数组序列化为 kvReport/mmdata value 字符串 */ export function serializeKvReportValue(arr: any[]) { return arr .map((field) => { try { if (typeof field === 'string') { return field.replace(/,/g, ';'); } if (!!field && typeof field === 'object') { return JSON.stringify(field)?.replace(/,/g, ';') || ''; } return field?.toString().replace(/,/g, ';') || ''; } catch { return ''; } }) .join(','); }