013.001.story.md 6.0 KB

故事 013.001:修复残疾人后端模块类型错误

状态

Ready for Review

故事

作为系统开发人员, 我希望修复残疾人后端模块中的类型错误, 以便提高代码质量、减少运行时错误风险并增强TypeScript类型安全性。

验收标准

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

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

任务 / 子任务

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

任务1:分析并修复aggregated.routes.ts类型错误(AC:1,2,3)

  • 分析src/routes/aggregated.routes.ts第134行的类型错误:bankCards属性类型不兼容
  • 分析第204行的类似类型错误
  • 检查createDisabledPersonWithAllData函数的参数类型定义
  • 修复File类型与null类型冲突问题
  • 确保修复后的代码通过类型检查

任务2:修复集成测试类型错误(AC:1,2,3)

  • 分析tests/integration/person-extension.integration.test.ts中的类型错误:
    • 第88行:数组类型与单个实体类型混淆错误
    • 第106行:EmploymentOrder数组类型错误
    • 第145行:数组属性访问错误
    • 第231行:数组属性访问错误
    • 第258行:动态属性访问缺乏类型保护
    • 第294行:数组属性访问错误
    • 第317-320行:动态属性访问错误
    • 第372-375行:动态属性访问错误
  • 修复数组类型与实体类型的混淆
  • 添加类型保护或精确类型断言
  • 确保测试代码类型正确

任务3:检查并修复其他潜在类型问题(AC:1,4,5)

  • 检查整个残疾人模块中any类型的使用
  • 优化Zod schema的类型推断
  • 确保TypeORM实体与TypeScript类型一致
  • 修复其他可能存在的类型警告或错误

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

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

技术笔记

现有系统集成

  • 集成模块:残疾人管理模块 (@d8d/allin-disability-module)
  • 技术栈:TypeScript 5.8.3、Hono 4.8.5、Zod 4.1.12、TypeORM 0.3.20、Vitest 3.2.4
  • 遵循模式
    • TypeORM实体模式(src/entities/
    • Zod schema验证模式(src/schemas/
    • Hono路由模式(src/routes/
    • 集成测试模式(tests/integration/
  • 接触点
    • aggregated.routes.ts:聚合路由处理
    • person-extension.integration.test.ts:人才扩展API集成测试
    • 实体定义与schema验证的集成

关键约束

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

集成方法

  1. 类型推断优化:利用Zod schema的类型推断能力,减少手动类型定义
  2. 类型保护:在动态属性访问处添加类型保护
  3. 精确类型:使用具体的类型定义替代any类型
  4. 测试驱动修复:基于现有测试验证修复的正确性

开发笔记

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

先前故事洞察

史诗013中无先前故事(这是第一个故事)。

已知类型错误详情

  1. aggregated.routes.ts错误

    • 错误位置:第134行和第204行
    • 错误描述:bankCards属性中File类型与null类型冲突
    • 涉及类型:Partial<DisabledBankCard>[]与包含File属性的对象数组不兼容
  2. 集成测试类型错误

    • 数组类型与单个实体类型混淆(DisabledPerson[] vs DisabledPerson
    • 动态属性访问缺乏类型保护(如薪资历史征信信息视频列表
    • 数组属性访问错误(.id访问数组而不是数组元素)
  3. 潜在类型问题

    • any类型的使用可能隐藏类型错误
    • Zod schema与TypeORM实体类型可能不完全一致
    • 响应类型定义可能不够精确

修复策略

  1. 精确类型定义:分析并修复createDisabledPersonWithAllData函数的参数和返回值类型
  2. 类型保护:在动态属性访问处添加in操作符检查或类型守卫
  3. 数组处理:确保数组操作正确处理数组类型而非单个元素
  4. 测试修复:修复测试代码中的类型错误,确保测试逻辑正确

风险缓解

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

兼容性验证

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

相关技术文档

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

验证检查清单

范围验证

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

清晰度检查

  • 故事需求明确(修复具体类型错误)
  • 集成点明确指定(aggregated.routes.ts和集成测试)
  • 成功标准可测试(类型检查通过、测试通过)
  • 回滚方法简单(恢复类型定义更改)