核心是两步:先安全解析json,再安全使用数据;需用try-catch+预检封装json.parse(),过滤空值/bom/html片段,并返回{ok: boolean; data: any; error?: error}结构,typescript中应以unknown接收并配合类型守卫、可选链、zod校验确保运行时安全。

核心是两步:先安全解析 JSON,再安全使用数据。不能跳过任一环节,否则容易在运行时崩溃。
用 try-catch + 预检封装 JSON 解析
原生 JSON.parse() 遇到空字符串、HTML 片段、截断响应会直接抛错。必须包裹处理:
- 提前过滤
null、undefined、空白字符串(包括 BOM 字符) - 用
try...catch捕获SyntaxError,不吞掉其他异常 - 检查响应文本是否以
/code>、<code> 开头,快速识别 HTML 错误页 - 返回结构化结果:
{ ok: boolean; data: any; error?: Error }
用 unknown 类型接收原始数据
TypeScript 中,API 响应不该用 any,而应声明为 unknown —— 它强制你在使用前做类型判断:
-
unknown不能直接访问属性或调用方法,编译器会报错 - 必须通过
typeof、Array.isArray()、in操作符等做类型守卫 - 例如:
if (typeof res === 'object' && res !== null && 'id' in res)
访问嵌套字段时用可选链和空值合并
即使解析成功,字段也可能缺失或类型不符。避免写 data.user.profile.name.toUpperCase() 这类高危代码:
- 用
?.短路访问:data?.user?.profile?.name - 用
??提供默认值:data?.user?.profile?.name ?? 'Anonymous' - 对数组索引也用
?.[0],安全处理空数组场景
关键字段加运行时校验(按需)
对业务强依赖的字段,光靠类型守卫还不够。建议引入轻量校验:
- 基础校验:
typeof data?.count === 'number'、Array.isArray(data?.items) - 结构校验:用
zod定义 schema,z.object({...}).safeParse(data) - 注意 bundle size,简单项目可用手工守卫,复杂表单或核心流程推荐 zod
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











