keel
管理员

契约层是怎么工作的

类型只定义一次,前后端各自推导。改一个字段,忘了跟上的地方会在构建时报错,而不是上线后报错。

packages/shared 里只有 Zod schema 和从它推导出来的类型,没有任何运行时逻辑。 后端拿 schema 当校验管道用(ZodValidationPipe),前端拿推导出的类型当接口返回值的形状用。两边引的是同一个文件,所以「后端改了字段但前端还按老形状取」这件事在 tsc 阶段就挂了。 关键约束是:类型不许在别处重复声明一遍。角色枚举曾经在三个地方各写了一份 string 联合,直到有一次拼错了大小写 —— 那次之后统一收到了 userRoleSchema,@Roles 的参数类型也从 string 收成了 UserRole。