013.004.story.md 7.4 KB

故事 013.004:修复mini小程序类型错误

状态

Ready for Review

故事

作为系统开发人员, 我希望修复mini小程序项目中的类型错误, 以便提高代码质量、减少运行时错误风险并增强TypeScript类型安全性。

验收标准

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

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

任务 / 子任务

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

任务1:修复form.tsx中的Controller组件类型错误(AC:1,2,3)

  • 分析src/components/ui/form.tsx第38行的类型错误:Controller组件类型不兼容JSX元素类型
  • 检查React Hook Form的Controller组件类型定义
  • 修复类型不兼容问题,确保正确导入和使用类型
  • 验证修复后的表单组件正常工作

任务2:修复api.ts中的unknown类型问题(AC:1,4,5)

  • 分析src/api.ts第34行的类型错误:响应对象类型为unknown
  • 检查hono/client RPC响应类型定义
  • 添加适当的类型断言或类型保护
  • 确保API客户端类型安全

任务3:清理未使用的导入和变量(AC:1,5)

  • 清理src/components/ui/avatar-upload.tsx中的未使用导入(Text, Button, iconSize
  • 清理src/components/ui/label.tsx中的未使用ref参数
  • 清理src/pages/login/index.tsx中的未使用导入(Navbar, FormLabel
  • 清理src/utils/minio.ts中的未使用变量(callbacks, progressDetails
  • 运行类型检查验证清理结果

任务4:修复测试配置中的全局类型声明问题(AC:1,2)

  • 分析tests/setup.ts中的类型错误:全局变量重复声明和类型问题
  • 修复defineAppConfig全局类型声明
  • 确保测试环境类型定义正确
  • 验证测试可以正常执行

任务5:检查并修复依赖包类型问题(AC:1,4)

  • 检查@d8d/auth-module缺少导出问题(authMiddleware, enterpriseAuthMiddleware
  • 检查@d8d/file-module缺少导出问题(File, FileService
  • 检查@d8d/allin-disability-module模块解析问题
  • 更新类型定义或调整导入方式

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

  • 运行类型检查:cd mini && pnpm typecheck
  • 运行所有测试:cd mini && pnpm test
  • 验证现有小程序功能正常
  • 确保无回归

技术笔记

现有系统集成

  • 集成模块:mini小程序项目(基于Taro框架)
  • 技术栈:Taro 4.1.4、React 18、TypeScript、Webpack 5、@tanstack/react-query、react-hook-form + zod、hono/client RPC
  • 遵循模式
    • Taro小程序开发模式(src/pages/目录结构)
    • React Hook Form表单处理模式
    • hono/client RPC API调用模式
    • Jest测试模式(mini使用Jest,其他包使用Vitest)
  • 接触点
    • src/components/ui/form.tsx:表单组件
    • src/api.ts:API客户端
    • tests/setup.ts:测试配置
    • 各页面组件和工具函数

关键约束

  1. 向后兼容:小程序功能必须保持不变,只进行类型层面的修复
  2. 测试完整性:所有现有测试必须通过,包括组件测试和API测试
  3. 类型安全:修复后应提高类型安全性,减少运行时错误风险
  4. 性能影响:类型修复不应影响小程序运行时性能
  5. 框架兼容:修复必须与Taro框架和React 18兼容

集成方法

  1. 组件类型修复:确保React组件类型与Taro框架兼容
  2. API类型安全:强化hono/client RPC响应类型处理
  3. 代码清理:移除未使用代码,提高代码整洁度
  4. 测试配置修复:确保测试环境类型定义正确
  5. 依赖类型检查:验证模块导入的类型正确性

开发笔记

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

先前故事洞察

  • 史诗013已修复残疾人后端模块和server包的类型错误(故事013.001、013.002)
  • 故事013.003为史诗012新增路由创建了连通性集成测试
  • 本次故事专注于mini小程序项目的类型错误修复

已知类型错误详情

  1. form.tsx Controller组件错误

    • 错误位置:src/components/ui/form.tsx第38行
    • 错误描述:Controller不能用作JSX组件
    • 涉及类型:React Hook Form的Controller组件与Taro/React类型兼容性问题
  2. api.ts unknown类型错误

    • 错误位置:src/api.ts第34行
    • 错误描述:对象类型为unknown
    • 涉及类型:hono/client RPC响应类型处理
  3. 未使用代码问题

    • 多个文件中存在未使用的导入和变量
    • 影响代码整洁度和类型检查
  4. 测试配置类型错误

    • 错误位置:tests/setup.ts
    • 错误描述:全局变量defineAppConfig重复声明和类型不存在
    • 涉及类型:Taro全局类型定义
  5. 依赖包类型问题

    • @d8d/auth-module等包缺少导出类型
    • 模块解析类型问题

修复策略

  1. 组件类型兼容性:检查React Hook Form与Taro的兼容性,必要时调整类型定义
  2. API响应类型处理:添加类型断言或使用类型守卫处理unknown类型
  3. 代码清理:使用ESLint或手动清理未使用代码
  4. 测试环境修复:修正全局类型声明,确保测试配置正确
  5. 依赖类型修复:检查包导出,必要时更新类型定义或调整导入方式

风险缓解

  • 主要风险:类型修复可能影响小程序运行时行为
  • 缓解措施:小范围逐步修复,充分测试验证
  • 回滚计划:如果修复导致问题,可以恢复类型定义更改

兼容性验证

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

相关技术文档

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

验证检查清单

范围验证

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

清晰度检查

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

文件列表

  • mini/src/components/ui/form.tsx - 修复Controller组件类型错误
  • mini/src/api.ts - 修复unknown类型问题
  • mini/src/components/ui/avatar-upload.tsx - 清理未使用导入
  • mini/src/components/ui/label.tsx - 清理未使用ref参数
  • mini/src/pages/login/index.tsx - 清理未使用导入
  • mini/src/utils/minio.ts - 清理未使用变量
  • mini/tests/setup.ts - 修复全局类型声明
  • mini/tests/yongren-routes.test.ts - 添加类型忽略注释