|
|
@@ -0,0 +1,143 @@
|
|
|
+# <!-- Powered by BMAD™ Core -->
|
|
|
+
|
|
|
+# Story 016.012: 修复 u-charts.ts TypeScript 类型错误
|
|
|
+
|
|
|
+## Status
|
|
|
+
|
|
|
+In Progress
|
|
|
+
|
|
|
+## Story
|
|
|
+
|
|
|
+**作为** 开发者,
|
|
|
+**我想要** 修复 u-charts.ts 文件中的所有 TypeScript 类型错误,
|
|
|
+**以便于** 包可以成功构建和通过类型检查,确保类型安全性
|
|
|
+
|
|
|
+## Acceptance Criteria
|
|
|
+
|
|
|
+1. 所有 TypeScript 类型错误已修复(pnpm typecheck 通过)
|
|
|
+2. 变量声明顺序正确,无作用域错误
|
|
|
+3. 所有可选属性都有正确的类型保护或默认值
|
|
|
+4. 类型定义完整且一致(ChartsConfig、ChartOptions、SeriesItem等)
|
|
|
+5. ScrollOption 类型冲突已解决
|
|
|
+6. 包可以成功构建(pnpm build)
|
|
|
+7. 生成的 .d.ts 声明文件正确
|
|
|
+8. 所有图表功能仍然正常工作
|
|
|
+
|
|
|
+## Tasks / Subtasks
|
|
|
+
|
|
|
+- [ ] Task 1: 分析并修复类型定义问题 (AC: 4)
|
|
|
+ - [ ] 1.1 检查 `src/types/charts.ts` 中的类型定义
|
|
|
+ - [ ] 1.2 确保 ChartsConfig、ChartOptions 等类型定义完整且正确
|
|
|
+ - [ ] 1.3 修复 ScrollOption 类型冲突(coordinate.ts vs u-charts.ts)
|
|
|
+
|
|
|
+- [ ] Task 2: 修复变量声明和作用域问题 (AC: 2)
|
|
|
+ - [ ] 2.1 移动 config 变量声明到正确位置(在使用前)
|
|
|
+ - [ ] 2.2 确保所有变量在使用前已正确声明和初始化
|
|
|
+ - [ ] 2.3 第一批修复完成后,在 u-charts.ts 顶部移除 `@ts-nocheck` 并验证错误数量减少
|
|
|
+
|
|
|
+- [ ] Task 3: 修复可选链类型安全问题 (AC: 3)
|
|
|
+ - [ ] 3.1 为 opts.extra.pie、opts.extra.ring、opts.extra.rose 等添加可选链或默认值
|
|
|
+ - [ ] 3.2 为所有可能为 undefined 的属性添加类型守卫
|
|
|
+
|
|
|
+- [ ] Task 4: 修复类型不匹配问题 (AC: 4)
|
|
|
+ - [ ] 4.1 统一 ChartsConfig 和 ChartOptions 类型定义
|
|
|
+ - [ ] 4.2 确保传递给函数的参数类型正确
|
|
|
+ - [ ] 4.3 修复 SeriesItem、XAxisConfig、YAxisConfig 等类型的可选属性问题
|
|
|
+
|
|
|
+- [ ] Task 5: 修复 this 类型问题 (AC: 5)
|
|
|
+ - [ ] 5.1 确保 uCharts 类的 this 类型正确传递到辅助函数
|
|
|
+ - [ ] 5.2 修复 scrollOption 类型冲突
|
|
|
+
|
|
|
+- [ ] Task 6: 验证修复结果 (AC: 1, 6, 7, 8)
|
|
|
+ - [ ] 6.1 运行 pnpm typecheck 确保无类型错误
|
|
|
+ - [ ] 6.2 运行 pnpm build 确保构建成功
|
|
|
+ - [ ] 6.3 检查生成的 .d.ts 声明文件
|
|
|
+ - [ ] 6.4 确保所有图表类型仍然正常工作
|
|
|
+ - [ ] 6.5 **最终验证**:完全移除 `@ts-nocheck`,确保 0 个类型错误
|
|
|
+
|
|
|
+## Dev Notes
|
|
|
+
|
|
|
+### 背景信息
|
|
|
+
|
|
|
+**来源**: [epic-016-mini-charts-package.md](../prd/epic-016-mini-charts-package.md#故事016-012修复-u-chartsts-typescript-类型错误)
|
|
|
+
|
|
|
+在完成模块化搬迁(故事016.002-016.008)后,u-charts.ts 文件存在大量TypeScript类型错误(约100+个)。文件当前使用 `@ts-nocheck` 来暂时跳过类型检查。
|
|
|
+
|
|
|
+**本故事的核心目标**:逐步移除 `@ts-nocheck` 并集中解决所有类型问题,最终实现完整的 TypeScript 严格类型检查。
|
|
|
+
|
|
|
+主要问题包括:
|
|
|
+
|
|
|
+1. **变量声明顺序问题**(第368行使用config,第437行才声明)
|
|
|
+2. **可能为undefined的属性访问**(opts.extra.pie等)
|
|
|
+3. **类型不匹配**(ChartsConfig vs ChartOptions等)
|
|
|
+4. **缺少必要的类型属性定义**
|
|
|
+5. **ScrollOption类型冲突**(coordinate.ts vs u-charts.ts)
|
|
|
+
|
|
|
+### 错误类型统计
|
|
|
+
|
|
|
+根据 VS Code 报告的错误,主要类型错误包括:
|
|
|
+
|
|
|
+- 变量作用域错误:第368行和第437行的 config 变量
|
|
|
+- 可选属性访问错误:opts.extra.pie.labelWidth、opts.extra.ring.labelWidth 等
|
|
|
+- 类型不匹配错误:ChartsConfig vs ChartOptions、SeriesItem 类型问题
|
|
|
+- this 类型错误:uCharts 实例传递到辅助函数时的类型不匹配
|
|
|
+- ScrollOption 类型冲突:两个不同定义的 ScrollOption 类型
|
|
|
+
|
|
|
+### 相关文件
|
|
|
+
|
|
|
+- `mini-ui-packages/mini-charts/src/lib/charts/u-charts.ts` - **主要修复文件**(当前使用 `@ts-nocheck`)
|
|
|
+- `mini-ui-packages/mini-charts/src/types/charts.ts` - 类型定义文件
|
|
|
+- `mini-ui-packages/mini-charts/src/lib/utils/coordinate.ts` - ScrollOption 类型定义
|
|
|
+- `mini-ui-packages/mini-charts/src/lib/helper-functions/index-finders.ts` - 辅助函数
|
|
|
+
|
|
|
+**关键文件说明**:
|
|
|
+- u-charts.ts 第1行当前有 `@ts-nocheck`,这是本故事需要移除的目标
|
|
|
+- 修复过程中可以使用 `@ts-expect-error` 临时标记某些已知问题
|
|
|
+- 最终目标:完全移除 `@ts-nocheck`,实现 0 个类型错误
|
|
|
+
|
|
|
+### 修复策略
|
|
|
+
|
|
|
+**重要**:u-charts.ts 文件当前使用 `@ts-nocheck` 来跳过类型检查。本故事的核心目标是**逐步移除 `@ts-nocheck` 并集中解决所有类型问题**。
|
|
|
+
|
|
|
+1. **渐进式启用类型检查**:
|
|
|
+ - 从构造函数开始,逐步移除 `@ts-nocheck`
|
|
|
+ - 可以使用 `@ts-expect-error` 标记已知的需要修复的错误
|
|
|
+ - 每修复一批错误后,运行 `pnpm typecheck` 验证
|
|
|
+
|
|
|
+2. **分批次修复错误**:
|
|
|
+ - **第一批**:变量声明和作用域问题(config 变量等)
|
|
|
+ - **第二批**:可选属性访问问题(opts.extra.pie 等)
|
|
|
+ - **第三批**:类型定义问题(ChartsConfig、ChartOptions、SeriesItem 等)
|
|
|
+ - **第四批**:this 类型问题(scrollOption 类型冲突等)
|
|
|
+ - **第五批**:参数类型不匹配问题
|
|
|
+
|
|
|
+3. **保持向后兼容**:确保修复后的代码与现有使用方式兼容
|
|
|
+
|
|
|
+4. **添加类型保护**:使用可选链(`?.`)和类型守卫确保类型安全
|
|
|
+
|
|
|
+5. **统一类型定义**:确保所有类型定义一致且完整
|
|
|
+
|
|
|
+6. **最终目标**:完全移除 `@ts-nocheck`,通过完整的 TypeScript 严格类型检查
|
|
|
+
|
|
|
+### 测试计划
|
|
|
+
|
|
|
+修复完成后需要运行以下测试:
|
|
|
+
|
|
|
+1. 类型检查:`pnpm typecheck`
|
|
|
+2. 构建测试:`pnpm build`
|
|
|
+3. 单元测试:`pnpm test`(如果有)
|
|
|
+4. 手动测试:确保所有图表类型仍然正常工作
|
|
|
+
|
|
|
+## Dev Agent Record
|
|
|
+
|
|
|
+### Agent Model Used
|
|
|
+- Model: claude-sonnet-4-5-20250929
|
|
|
+- Date: 2025-12-25
|
|
|
+
|
|
|
+### Debug Log References
|
|
|
+
|
|
|
+### Completion Notes
|
|
|
+
|
|
|
+### File List
|
|
|
+
|
|
|
+### Change Log
|