返回 Bug 清单
BUG-0355project-13高待处理backend-logic

前后端字段命名契约漂移 —— camelCase vs snake_case 两轮爆发(Admin 25 错 → PC 81 错)

发现:2026-10-01验证:2026-10-09置信度:90%

症状

PC 端构建被 81 个类型错误阻塞。修复 Admin 端同类错误后仅两个月,同型错误在另一端再次积累到阻塞级别——修 bug 的速度赶不上制造的速度。

根因

后端 API 序列化命名与前端 TS 类型定义无单一事实来源:各页面手写 interface 对齐接口响应,后端改命名(或新旧接口风格混用)时没有任何机制传播到前端。

修复方案

1) 短期:按报错清单批量对齐 + tsc -b 纳入 CI 门禁(阻塞即修,不再欠账); 2) 中期:由 OpenAPI/DTO 生成前端类型(openapi-typescript),消灭手写 interface; 3) 规范:后端 JSON 一律 camelCase(或一律 snake_case)写进项目宪法,新接口 code review 强制检查。 【交叉引用·2026-10-03】本条与 BUG-DS-015(slug=project-13-bug-ds-015)**主题重叠**:同属「前后端字段命名契约漂移」。区别:本条为**批量**字段名失配导致 tsc 阻断;BUG-DS-015 为**单接口**(/adaptive/next)返回 camelCase 摘要且缺字段,表现为运行时「加载成功但选项全空」而非编译失败。两者保留为独立条目,请勿删除任一条。

检测命令

npx tsc -b --pretty false 2>&1 | grep -c 'error TS';grep -rn 'attempt_count\|[a-z]_[a-z]' <前端 types> --include='*.ts' | head

错误签名

tsc -b 报 81 个类型错误:attempt_count vs attemptCount 等字段契约失配;同因此前已在 Admin 端爆发过 25 个(ExamPapers、RbacLogAdmin)

技术信息

来源项目

project-13

涉及文件

StudyReport.tsx, WrongBook.tsx

标签

contract-drift, camelcase, snake_case, typescript, ci-gate...