feat: 接入Ts配置

This commit is contained in:
zdl
2025-11-14 16:15:29 +08:00
parent e23feb3c23
commit 48fdca203c
10 changed files with 663 additions and 31 deletions

159
CLAUDE.md
View File

@@ -20,6 +20,7 @@
**开发指南**:
- [开发工作流](#开发工作流) - 路由、组件、API、Redux 开发指南
- [TypeScript 接入](#typescript-接入) - TypeScript 渐进式迁移方案与指南
- [常见开发任务](#常见开发任务) - 5 个详细的开发任务教程
- [技术路径与开发指南](#技术路径与开发指南) - UI 框架选型、技术栈演进、最佳实践
@@ -42,6 +43,7 @@
**前端**
- **核心框架**: React 18.3.1
- **类型系统**: TypeScript 5.9.3(渐进式接入中,支持 JS/TS 混合开发)
- **UI 组件库**: Chakra UI 2.8.2(主要) + Ant Design 5.27.4(表格/表单)
- **状态管理**: Redux Toolkit 2.9.2
- **路由**: React Router v6.30.1 配合 React.lazy() 实现代码分割
@@ -81,6 +83,10 @@ npm test # 运行 React 测试套件CRACO
npm run lint:check # 检查 ESLint 规则(退出码 0
npm run lint:fix # 自动修复 ESLint 问题
npm run type-check # TypeScript 类型检查(不生成输出)
npm run type-check:watch # TypeScript 类型检查监听模式
npm run clean # 删除 node_modules 和 package-lock.json
npm run reinstall # 清洁安装(运行 clean + install
```
@@ -1386,6 +1392,159 @@ src/views/Community/components/
---
## TypeScript 接入
### 概述
项目已于 **2025-11-13** 完成 TypeScript 环境配置,采用**渐进式迁移策略**,支持 JavaScript 和 TypeScript 混合开发。
**当前状态**: 环境配置完成,准备开始代码迁移
**迁移策略**: 新代码使用 TypeScript旧代码按优先级逐步迁移
**类型严格度**: 推荐模式(`noImplicitAny: true`,其他严格检查待后续开启)
### 已完成的环境配置
**TypeScript 编译器**: v5.9.3
**tsconfig.json**: 推荐模式配置,支持 JS/TS 混合开发
**CRACO 配置**: 支持 `.ts``.tsx` 文件编译
**ESLint 配置**: 支持 TypeScript 语法检查
**路径别名**: 与现有 `@/` 别名保持一致
**全局类型定义**: 基础类型文件已创建在 `src/types/`
### 可用类型定义
项目已创建以下基础类型定义文件:
**`src/types/api.ts`** - API 相关类型
- `ApiResponse<T>` - 通用 API 响应结构
- `PaginatedResponse<T>` - 分页响应
- `ApiError` - API 错误类型
- `ListQueryParams` - 列表查询参数
**`src/types/stock.ts`** - 股票相关类型
- `StockInfo` - 股票基础信息
- `StockQuote` - 股票行情数据
- `KLineData` - K 线数据
- `StockFinancials` - 财务指标
- `StockPosition` - 股票持仓
- `Sector` - 概念/行业板块
**`src/types/user.ts`** - 用户相关类型
- `UserInfo` - 用户基础信息
- `AuthInfo` - 认证信息
- `LoginParams` / `RegisterParams` - 登录/注册参数
- `UserSubscription` - 订阅信息
- `UserAccount` - 资金账户
- `UserSettings` - 用户设置
**使用方式**:
```typescript
// 统一导入
import type { StockQuote, UserInfo, ApiResponse } from '@/types';
// 或从具体文件导入
import type { StockQuote } from '@/types/stock';
```
### TypeScript 命令
```bash
# 类型检查(不生成输出文件)
npm run type-check
# 类型检查 + 监听模式
npm run type-check:watch
# ESLint 检查(包含 TS 文件)
npm run lint:check
# ESLint 自动修复
npm run lint:fix
```
### 迁移路线图
详细的迁移指南请参考 **[TYPESCRIPT_MIGRATION.md](./TYPESCRIPT_MIGRATION.md)** 文档。
**简要路线图**:
1. **优先级 1⃣**: 工具层(`src/utils/`, `src/constants/`
- 纯函数,迁移成本低,收益高
- 提供类型定义给其他模块使用
2. **优先级 2⃣**: 类型定义层(扩展 `src/types/`
- 添加 `trading.ts`, `community.ts`, `chart.ts`
3. **优先级 3⃣**: 服务层(`src/services/`
- 定义 API 请求/响应类型
- 使用 `ApiResponse<T>` 包装响应
4. **优先级 4⃣**: Redux 状态层(`src/store/slices/`
- 定义 `RootState``AppDispatch` 类型
- 创建类型化的 hooks
5. **优先级 5⃣**: 自定义 Hooks`src/hooks/`
- 添加泛型支持
- 定义完整返回值类型
6. **优先级 6⃣**: 组件层(`src/components/`, `src/views/`
- Atoms → Molecules → Organisms → Pages
- 优先迁移复用度高的组件
### 开发规范
**新代码**:
-**必须使用 TypeScript**`.ts``.tsx`
- ✅ 所有函数参数和返回值添加类型
- ✅ 组件 Props 使用 `interface` 定义
- ✅ 避免使用 `any`(特殊情况需添加注释说明)
**旧代码迁移**:
- 按优先级迁移,不强制一次性完成
- 迁移前先阅读 [TYPESCRIPT_MIGRATION.md](./TYPESCRIPT_MIGRATION.md)
- 迁移后运行 `npm run type-check` 验证
**类型定义**:
- 公共类型定义导出到 `src/types/`
- 组件内部类型可定义在组件文件中
- 使用 `type` 还是 `interface` 参考 [迁移指南](./TYPESCRIPT_MIGRATION.md)
### 常见问题
**Q: 路径别名 `@/types` 无法识别?**
A: 确保在 `tsconfig.json` 中配置了 `paths`,并重启 IDE。使用 `npm run type-check` 而非命令行 `tsc`
**Q: 如何处理第三方库没有类型定义?**
A:
1. 尝试安装 `@types/library-name`
2. 创建自定义类型声明文件 `src/types/library-name.d.ts`
3. 临时使用 `as any`(需添加 TODO 注释)
**Q: 迁移期间如何处理 any 类型?**
A: 添加 ESLint 禁用注释和 TODO 说明:
```typescript
/* eslint-disable @typescript-eslint/no-explicit-any */
// TODO: 待完善类型定义
const legacyFunction = (data: any): any => { ... };
```
**Q: React 组件的 children 类型如何定义?**
A: 使用 `React.ReactNode`
```typescript
interface Props {
children: React.ReactNode;
}
```
### 参考资源
- [TYPESCRIPT_MIGRATION.md](./TYPESCRIPT_MIGRATION.md) - 完整迁移指南
- [TypeScript 官方文档](https://www.typescriptlang.org/docs/)
- [React TypeScript Cheatsheet](https://react-typescript-cheatsheet.netlify.app/)
- [Redux Toolkit TypeScript 指南](https://redux-toolkit.js.org/usage/usage-with-typescript)
---
## 更新本文档
本 CLAUDE.md 文件是一个持续更新的文档。在以下情况下应更新它: