/** tRPC 错误 → 用户可读文案:提取 zod 数组消息、兜底 HTML/网络异常。 */ export function formatTrpcError(err: unknown, fallback: string): string { const raw = err instanceof Error ? err.message : typeof err === "string" ? err : ""; if (!raw) return fallback; if (raw.startsWith("<") || raw.includes(" e && typeof e === "object" ? (e as { message?: unknown }).message : null, ) .filter((m): m is string => typeof m === "string" && m.length > 0); if (msgs.length > 0) return msgs.join(";"); } if (parsed && typeof parsed === "object" && "message" in parsed) { const m = (parsed as { message?: unknown }).message; if (typeof m === "string" && m) return m; } } catch { /* 非 JSON,按原文处理 */ } return raw; }