Talk to me点按钮开聊
2025-10-221分钟TypeScript

用类型系统把 API 边界钉在仓库里

在领域模型与 HTTP 层之间,用 zod / 显式 DTO 与 branded type,把「口头约定」变成编译期错误。

DTO 不是多余的一层

对外 JSON 与对内领域对象混在同一类型里,短期省代码,长期会在「字段可空吗」「单位是秒还是毫秒」上反复扯皮。

DTO 负责「线上长什么样」,领域模型负责「业务认为它是什么」;中间用 parse 函数失败即拒绝请求,比运行时 if 分散在各处干净得多。

branded type 防混用

`UserId` 与 `ProjectId` 在运行时都是 string,但在类型层不相交,能拦住把用户 id 当项目 id 传的低级错误;对大型单体仓库性价比极高。

落地顺序

先挑一条最容易出事故的请求路径做样板:入站 parse、出站 serialize、单测覆盖非法载荷;再横向推广到其他模块。

喜欢这篇文章?