|
|
@@ -0,0 +1,159 @@
|
|
|
+# 故事 013.004:修复mini小程序类型错误
|
|
|
+
|
|
|
+## 状态
|
|
|
+Approved
|
|
|
+
|
|
|
+## 故事
|
|
|
+**作为**系统开发人员,
|
|
|
+**我希望**修复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、测试配置等)
|
|
|
+- [ ] 成功标准可测试(类型检查通过、测试通过)
|
|
|
+- [ ] 回滚方法简单(恢复类型定义更改)
|