Use Cases

如何用 Claude Code 自动化代码重构

详解如何利用 Claude Code 高效完成代码重构自动化。包含实用提示词和真实项目中的重构模式。

为什么用 Claude Code 做重构?

每个人都知道重构很重要,但手动操作既繁琐又容易被搁置。Claude Code 能理解你的整个项目,并且可以自主执行跨文件的重构操作。

模式 1:提升类型安全性

消除 any 类型

> 搜索项目中所有的 any 类型,替换为合适的类型定义。
> 修改完成后验证 npx tsc --noEmit 能否通过。

Claude Code 的处理流程:

  1. 搜索包含 any 类型的文件
  2. 根据上下文推断合适的类型
  3. 需要时创建类型定义文件
  4. 运行类型检查器确认编译通过

重构前后对比

// 重构前
function processData(data: any): any {
  return data.items.map((item: any) => item.name);
}

// 重构后
interface DataPayload {
  items: Array<{ name: string; id: number }>;
}

function processData(data: DataPayload): string[] {
  return data.items.map((item) => item.name);
}

模式 2:拆分函数,明确职责

拆分过长的函数正是 Claude Code 的拿手好戏。

> src/services/orderService.ts 中的 createOrder 函数超过 200 行。
> 按照单一职责原则将其拆分为更小的函数。
> 确保现有测试仍然通过。

拆分提示词

> 按以下原则拆分函数:
> - 每个函数不超过 30 行
> - 将校验、业务逻辑和持久化分离
> - 为每个函数添加 JSDoc 注释
> - 拆分测试以匹配新的函数边界

模式 3:统一错误处理

在整个项目中统一错误处理模式。

> 统一项目的错误处理方式:
> - 使用自定义错误类(AppError)
> - 将错误码定义为常量
> - try-catch 块中必须包含日志记录

以下是 Claude Code 生成的示例:

// src/errors/app-error.ts
export class AppError extends Error {
  constructor(
    public readonly code: string,
    message: string,
    public readonly statusCode: number = 500,
    public readonly cause?: Error
  ) {
    super(message);
    this.name = 'AppError';
  }
}

// 错误码常量
export const ErrorCodes = {
  USER_NOT_FOUND: 'USER_NOT_FOUND',
  INVALID_INPUT: 'INVALID_INPUT',
  DB_CONNECTION_ERROR: 'DB_CONNECTION_ERROR',
} as const;

模式 4:补充和完善测试

在覆盖率不足的地方添加测试。

# 用覆盖率报告指导测试补充
npx vitest run --coverage | claude -p "找出覆盖率低的文件并补充缺失的测试用例"
> 将 src/services/ 下所有文件的测试覆盖率提升到 80% 以上。
> 不仅要覆盖正常路径,还要覆盖边界情况和错误场景。

模式 5:统一 API 响应格式

> 将所有 API 接口的响应格式统一为:
>
> 成功:{ success: true, data: T }
> 失败:{ success: false, error: { code: string, message: string } }
>
> 同步更新前端代码以适配新格式。

安全重构技巧

1. 先确认测试通过

> 先运行 npm test 确保所有现有测试通过。
> 如果有测试失败,在修改代码之前先告诉我。

2. 增量推进

逐模块重构,而不是一次性改完所有内容。

> 先只重构 src/services/userService.ts。
> 确认修改后测试通过,再继续下一个。

3. 审查 diff

> 给我看 git diff。如果内容太多,按文件总结变更。

4. 使用独立分支

git checkout -b refactor/error-handling
claude
> 开始错误处理的重构...

实战案例:改造遗留代码

以下是如何渐进式地现代化老旧代码库:

> 按以下步骤现代化这个项目:
> 1. 将 var 替换为 const/let
> 2. 将回调函数转换为 async/await
> 3. 将 require 转换为 import
> 4. 每次修改后验证测试通过
> 5. 逐步进行,每步报告结果

总结

有了 Claude Code,以前需要几天的重构工作现在几小时就能搞定。关键是:提供明确的规则、增量推进、始终用测试验证。先从一个小模块开始试试,亲眼看看效果。

#Claude Code #refactoring #code quality #automation #TypeScript