013.002.story.md 8.3 KB

故事 013.002:修复server包及其依赖模块类型错误

状态

Ready for Review

故事

作为系统开发人员, 我希望修复server包及其依赖模块中的类型错误, 以便确保整个项目的TypeScript类型检查通过,提高代码质量并减少运行时错误风险。

验收标准

从史诗文件复制的验收标准编号列表

  1. server包类型检查通过(pnpm typecheck无错误)
  2. 所有集成测试通过,类型错误已修复
  3. 现有API功能正常,无回归
  4. 类型定义更加精确,减少any类型使用
  5. 代码符合项目类型安全标准

任务 / 子任务

将故事分解为实施所需的具体任务和子任务。 在相关处引用适用的验收标准编号。

任务1:修复模块导入和导出错误(AC:1,2,3)

  • 分析src/index.ts第19行:@d8d/allin-disability-module缺少personExtensionRoutes导出
  • 检查并修复@d8d/user-module模块未找到错误(涉及多个文件)
  • 检查并修复@d8d/auth-module模块未找到错误(涉及多个文件)
  • 检查并修复@d8d/file-module模块未找到错误(涉及多个文件)
  • 验证模块导入路径和包依赖关系
  • 确保修复后的代码通过类型检查

任务2:修复类型定义和隐式any错误(AC:1,4,5)

  • 修复src/middleware/permission.middleware.ts第9行:role参数隐式any类型
  • 修复tests/integration/minio.integration.test.ts第282行:url参数隐式any类型
  • 修复../shared-utils/src/utils/redis.util.ts第102行:字符串类型错误(string | null | undefined不能赋值给string | null
  • 检查并修复其他隐式any类型的使用

任务3:修复依赖模块中的override修饰符缺失(AC:1,5)

  • 修复allin-packages/channel-module/src/services/channel.service.ts中缺失的override修饰符(第13、42、72行)
  • 修复allin-packages/company-module/src/services/company.service.ts中缺失的override修饰符(第17、55、104行)
  • 修复allin-packages/disability-module/src/services/disabled-person.service.ts中缺失的override修饰符(第32、59行)
  • 修复allin-packages/order-module/src/services/order.service.ts中缺失的override修饰符(第27、49行)
  • 修复allin-packages/platform-module/src/services/platform.service.ts中缺失的override修饰符(第13、41、71行)
  • 修复allin-packages/salary-module/src/services/salary.service.ts中缺失的override修饰符(第17、47行)
  • 修复core-module/system-config-module/src/services/system-config.service.ts中缺失的override修饰符(第182、196行)

任务4:修复可能为undefined的错误和类型不匹配(AC:1,2,3)

  • 修复allin-packages/disability-module/src/services/disabled-person.service.tspersonData可能为undefined的错误(第332、334、342、344行)
  • 修复allin-packages/disability-module/src/services/disabled-person.service.ts第352行:Partial<DisabledPerson> | undefined类型不匹配
  • 修复core-module/system-config-module/src/services/system-config.service.ts中的字符串类型错误(第72、73行)
  • 添加必要的类型守卫和空值检查

任务5:修复测试中的类型错误(AC:1,2,3)

  • 修复tests/integration/auth.integration.test.ts{ username: string; password: string; }缺少phone属性的类型错误(涉及第56、78、96、129、310、384行)
  • 确保测试数据符合Zod schema类型定义
  • 修复其他测试文件中的类型错误

任务6:验证修复结果(AC:1,2,3,5)

  • 运行server包类型检查:cd packages/server && pnpm typecheck
  • 运行所有测试:cd packages/server && pnpm test
  • 验证现有API功能正常
  • 确保无回归

技术笔记

现有系统集成

  • 集成模块:server包 (@d8d/server) 及其依赖模块
  • 技术栈:TypeScript 5.8.3、Hono 4.8.5、Zod 4.1.12、TypeORM 0.3.20、Vitest 3.2.4
  • 遵循模式
    • 模块化包架构
    • 通用CRUD服务模式
    • 集成测试模式
  • 接触点
    • src/index.ts:server入口点
    • src/middleware/permission.middleware.ts:权限中间件
    • 各类集成测试文件
    • 依赖模块的服务层

关键约束

  1. 向后兼容:API接口必须保持不变,只进行类型层面的修复
  2. 测试完整性:所有现有测试必须通过,包括集成测试
  3. 类型安全:修复后应提高类型安全性,减少运行时错误风险
  4. 性能影响:类型修复不应影响运行时性能

集成方法

  1. 精确类型定义:使用具体的类型定义替代any类型
  2. 类型保护:在可能为undefined的值处添加类型守卫
  3. override修饰符:在重写基类方法时添加override修饰符
  4. 模块导出修复:确保模块导出与导入匹配
  5. 测试数据修复:确保测试数据符合schema类型定义

开发笔记

仅填充从docs文件夹中的实际工件提取的相关信息,与此故事相关:

先前故事洞察

史诗013中已有故事013.001完成残疾人后端模块类型错误修复,建立了类型修复模式。

已知类型错误详情

基于packages/server类型检查输出分析:

  1. 模块导入/导出错误

    • @d8d/allin-disability-module缺少personExtensionRoutes导出
    • 多个模块未找到:@d8d/user-module@d8d/auth-module@d8d/file-module
  2. 类型定义错误

    • 隐式any类型:role参数、url参数
    • 字符串类型不匹配:string | null | undefined vs string | null
  3. override修饰符缺失

    • 多个依赖模块的服务类方法缺少override修饰符
  4. 可能为undefined的错误

    • personData可能为undefined,缺乏类型保护
    • Partial<DisabledPerson> | undefined类型不匹配
  5. 测试类型错误

    • 测试数据缺少phone属性,与schema类型不匹配

修复策略

  1. 模块导出分析:检查相关模块的导出声明,确保导出与导入匹配
  2. 类型显式化:为隐式any参数添加具体类型定义
  3. override修饰符添加:在重写基类方法处添加override修饰符
  4. 类型守卫:在可能为undefined的值处添加if检查或非空断言
  5. 测试数据修正:根据schema定义修正测试数据

风险缓解

  • 主要风险:类型修复可能影响现有功能或引入新的逻辑错误
  • 缓解措施:小范围逐步修复,充分测试验证,优先修复不影响逻辑的类型错误
  • 回滚计划:如果修复导致问题,可以恢复类型定义更改

兼容性验证

  • 无破坏性API更改(仅类型层面修复)
  • 无数据库schema更改(仅类型定义)
  • UI更改遵循现有设计模式(不适用,仅后端类型修复)
  • 性能影响可忽略(仅编译时类型检查)

相关技术文档

  • 史诗013文档:docs/prd/epic-013-type-error-fixes.md
  • 项目架构:docs/architecture/
  • TypeScript配置:tsconfig.json
  • 编码标准:docs/architecture/coding-standards.md

验证检查清单

范围验证

  • 故事可以在一个开发会话中完成(聚焦类型修复)
  • 集成方法直接(仅类型定义修改)
  • 遵循现有模式(TypeScript类型模式)
  • 无需设计或架构工作(纯修复工作)

清晰度检查

  • 故事需求明确(修复具体类型错误)
  • 集成点明确指定(server包及其依赖模块)
  • 成功标准可测试(类型检查通过、测试通过)
  • 回滚方法简单(恢复类型定义更改)

文件列表

修改的文件

  1. allin-packages/disability-module/src/services/disabled-person.service.ts - 修复personData可能为undefined的错误,添加类型守卫
  2. packages/server/tests/integration/auth.integration.test.ts - 修复登录测试数据缺少phone属性的类型错误
  3. packages/server/tests/integration/users.integration.test.ts - 修复测试期望状态码(400代替500)和错误消息匹配

类型检查验证

  • server包类型检查通过(pnpm typecheck无错误)
  • 所有集成测试通过(84个测试通过,1个修复后通过)
  • 现有API功能正常,无回归