refactor: 消除全部 Record<string, unknown>,TypeScript 严格类型治理 #331

Merged
xiaoxia merged 5 commits from fix/frontend-type-debt-round2 into develop 2026-07-14 21:15:56 +08:00
Owner

变更内容

消除代码中所有 Record<string, unknown> 用法,替换为具体类型定义,提升 TypeScript 类型安全性。

主要改动

  • TemplateLibrary.tsx: 新增 ConfigDisplayFields 接口替代 formatConfig 中的 as Record<string, unknown> 类型断言
  • VoiceLibrary.tsx: 新增 VoiceUploadMetadata 接口(含索引签名)替代音色上传元数据中的 Record<string, unknown>
  • VoiceMaterialLibrary.tsx: 新增 VoiceAssetMetadata 接口(含索引签名)替代配音素材元数据中的 Record<string, unknown>

技术要点

  • 需要索引签名的接口(赋值给含 [key: string]: unknown 的类型)添加了 [key: string]: unknown
  • 纯展示型接口(如 ConfigDisplayFields)不需要索引签名
  • 所有错误捕获处的 Record<string, any> 保留并添加 eslint-disable 注释(防御性编程)

验证

  • tsc --noEmit 零错误
  • grep -r "Record<string, unknown>" src/ 零结果
  • 代码审计复审已通过
## 变更内容 消除代码中所有 `Record<string, unknown>` 用法,替换为具体类型定义,提升 TypeScript 类型安全性。 ### 主要改动 - **TemplateLibrary.tsx**: 新增 `ConfigDisplayFields` 接口替代 `formatConfig` 中的 `as Record<string, unknown>` 类型断言 - **VoiceLibrary.tsx**: 新增 `VoiceUploadMetadata` 接口(含索引签名)替代音色上传元数据中的 `Record<string, unknown>` - **VoiceMaterialLibrary.tsx**: 新增 `VoiceAssetMetadata` 接口(含索引签名)替代配音素材元数据中的 `Record<string, unknown>` ### 技术要点 - 需要索引签名的接口(赋值给含 `[key: string]: unknown` 的类型)添加了 `[key: string]: unknown` - 纯展示型接口(如 `ConfigDisplayFields`)不需要索引签名 - 所有错误捕获处的 `Record<string, any>` 保留并添加 `eslint-disable` 注释(防御性编程) ### 验证 - ✅ `tsc --noEmit` 零错误 - ✅ `grep -r "Record<string, unknown>" src/` 零结果 - ✅ 代码审计复审已通过
xiaoxia added 1 commit 2026-07-14 19:11:45 +08:00
refactor: 消除全部 Record<string, unknown>,替换为具体类型定义
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Successful in 2m2s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 2m2s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 2m9s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m57s
8d86707e2e
- GeneratePage.tsx: 3处防御性错误提取函数添加 eslint-disable 注释
  (safeExtract/extractString/safeExtractErr),移除 as Record<string, unknown> 断言
- TemplateLibrary.tsx: formatConfig 使用 ConfigDisplayFields 接口替代 Record 断言
- VoiceLibrary.tsx: buildVoiceMetadata 返回 VoiceUploadMetadata 接口
- VoiceMaterialLibrary.tsx: buildMetadata 返回 VoiceAssetMetadata 接口
- editPlans.ts: EditPlanConfig 去除索引签名,补充所有生成时字段
- assets.ts: AssetItem.metadata 使用 AssetMetadata 具体类型
- products.ts: GenerateFromTemplateRequest.config 改为 EditPlanConfig
- tts.ts/voiceClone.ts: metadata 参数使用具体接口
- editingPlanner.ts: ValidationWarningDetails 替代 Record<string, unknown>
- client.ts: 防御性错误提取添加 eslint-disable 注释

TypeScript 编译零错误,代码库中零 Record<string, unknown> 残留
Author
Owner

复审 通过

前端类型债务2项全部验证通过:

状态
P3-1:11个文件 Record 类型替换 通过(25处→4处,净减84%)
P3-2:GeneratePage.tsx as EditPlanConfig 断言消除 通过(完整接口 + Pick 替代)

质量确认:

  • 类型断言总数 72 个(无新增)
  • 无新增 any 类型
  • 剩余 4 处 Record 均在错误处理边界,带 eslint-disable 说明

结论:CI 全绿后可合并。

## 复审 ✅ 通过 前端类型债务2项全部验证通过: | 项 | 状态 | |----|------| | P3-1:11个文件 Record 类型替换 | ✅ 通过(25处→4处,净减84%) | | P3-2:GeneratePage.tsx as EditPlanConfig 断言消除 | ✅ 通过(完整接口 + Pick 替代) | **质量确认:** - 类型断言总数 72 个(无新增) - 无新增 any 类型 - 剩余 4 处 Record 均在错误处理边界,带 eslint-disable 说明 **结论:CI 全绿后可合并。**
xiaoxia added 1 commit 2026-07-14 19:50:36 +08:00
style: fix prettier formatting
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Successful in 2m1s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 2m2s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 2m7s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m22s
9f9fd1ccb8
xiaoxia added 1 commit 2026-07-14 20:17:47 +08:00
style: 用项目Prettier配置格式化products.ts和GeneratePage.tsx
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 1m54s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 2m6s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Successful in 2m27s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m41s
1931cab504
修复CI Prettier检查失败——之前构建运维用默认参数格式化,
与项目实际配置不一致,导致2个文件仍然挂掉。
现在用项目本地npx prettier --write重新格式化。
xiaoxia added 1 commit 2026-07-14 20:44:41 +08:00
Merge remote-tracking branch 'origin/develop' into fix/frontend-type-debt-round2
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 2m31s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 2m34s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Successful in 2m50s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Successful in 2m24s
9a6136c9fd
xiaoxia merged commit d73fb2cf2b into develop 2026-07-14 21:15:56 +08:00
Sign in to join this conversation.