背景

给 JSON.parse 的结果加 User 类型,不会自动检查字段。类型系统接收到不可信数据之前,需要一道真正执行的校验。

核心判断

  1. HTTP、消息与本地存储统一从 unknown 开始。
  2. 在边界执行 schema 校验,成功后才交给领域层。
  3. 转换、默认值与未知字段策略显式声明,不默默修改业务含义。

最小示例

下面保留核心逻辑;业务类型、调用入口和环境配置按项目补齐。

const User = z.object({ id: z.number().int(), name: z.string().min(1) });
const user = User.parse(JSON.parse(body));

边界与误区

parse 会抛出异常;接口需要可控错误返回时可以用 safeParse。示例依赖 zod,并且 JSON 语法错误与 schema 错误应分别分类。

验证方式

覆盖缺字段、错误类型、空字符串、超范围数字和畸形 JSON,确认输入错误返回客户端错误,而不是落入通用 500。

小结

HTTP、消息和存储数据进入类型系统前都不可信,边界必须执行 schema 校验。