惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

G
GRAHAM CLULEY
博客园_首页
博客园 - Franky
Engineering at Meta
Engineering at Meta
雷峰网
雷峰网
The GitHub Blog
The GitHub Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
C
Cisco Blogs
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
MyScale Blog
MyScale Blog
Apple Machine Learning Research
Apple Machine Learning Research
宝玉的分享
宝玉的分享
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
F
Full Disclosure
Cloudbric
Cloudbric
J
Java Code Geeks
C
Cybersecurity and Infrastructure Security Agency CISA
Last Week in AI
Last Week in AI
The Hacker News
The Hacker News
量子位
T
The Blog of Author Tim Ferriss
T
Threatpost
Cisco Talos Blog
Cisco Talos Blog
C
Check Point Blog
AWS News Blog
AWS News Blog
Blog — PlanetScale
Blog — PlanetScale
T
Threat Research - Cisco Blogs
Project Zero
Project Zero
Scott Helme
Scott Helme
N
Netflix TechBlog - Medium
A
About on SuperTechFans
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
T
Tenable Blog
S
Schneier on Security
T
Tor Project blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Hacker News: Ask HN
Hacker News: Ask HN
MongoDB | Blog
MongoDB | Blog
Y
Y Combinator Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
H
Heimdal Security Blog
T
Tailwind CSS Blog
P
Privacy International News Feed
爱范儿
爱范儿
Google DeepMind News
Google DeepMind News
D
DataBreaches.Net
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
博客园 - 叶小钗
人人都是产品经理
人人都是产品经理
The Last Watchdog
The Last Watchdog

磊磊落落

世間有大愛,世間有大我 - 磊磊落落 端午遊遼寧團山海洋公園 - 磊磊落落 為什麼要讀古文? - 磊磊落落 莊河老街 - 磊磊落落 春遊橫山寺 - 磊磊落落 莊河青堆子古鎮 - 磊磊落落 在日常生活中,可以用 OpenClaw 做哪些事? - 磊磊落落 如何在 CentOS Stream 9 上安装 OpenClaw,并接入企业微信? 当下人人都在养龙虾,这龙虾(OpenClaw)为啥突然就火了? - 磊磊落落 如何将 Spring Statemachine 作为一个轻量级工作流引擎来使用? - 磊磊落落 编写一个 VS Code 扩展:将 Copilot 支持的大模型通过 REST API 方式暴露出来 编写提示词需要遵循的五个原则(附实践案例) - 磊磊落落 關於 2026 年即將生效的「吸毒記錄可封存」法案 - 磊磊落落 如何使用 Spec Kit 工具进行规范驱动开发? - 磊磊落落 Markdown 将成为 AI 时代的通用编程语言? - 磊磊落落 使用 FastMCP 编写一个 MySQL MCP Server 以自然语言的方式使用 Playwright MCP 进行浏览器自动化操作 - 磊磊落落 MCP 是什么?它是如何工作的? - 磊磊落落 2025 國慶假期總結 - 磊磊落落 週末逛泊霞灣與橫山寺 - 磊磊落落 如何在 Spring Boot 中使用 P6Spy 拦截 SQL 语句? Java 中如何使用 MapStruct 进行对象映射? - 磊磊落落
Cursor 初体验:将 React 项目从 JavaScript 升级到 TypeScript
磊磊落落 · 2025-11-06 · via 磊磊落落

博友圈 前端 boyouquan-ui 是一个使用 JavaScript 编写的 React 项目。本文将尝试借助 Cursor,不写一行代码,将其自动转换为 TypeScript 实现。

本文首先介绍一下当前 JavaScript 工程的整体架构,然后简单梳理一下如果使用人工的方式将其转换为 TypeScript 实现的话有哪些修改点?接着体验一下 Cursor,尝试使用它来将该 JavaScript 工程自动转换为 TypeScript 实现。最后,对比一下 Cursor 的修改点和人工梳理的修改点有什么差别?有没有什么遗漏和不足?

1 boyouquan-ui 的整体架构

boyouquan-ui 是一个轻量的 React 项目,构建工具使用的是 Webpack,转译工具使用的是 Babel。项目根目录下主要有环境变量文件 .env 、依赖配置文件 package.json、Webpack 配置文件 webpack.config.js、Babel 转译配置文件 babel.config.js、静态资源目录 public 和源代码目录 src

源代码目录 src 下有应用入口文件 index.js、路由配置文件 App.js、页面级组件目录 pages、通用可复用组件目录 components、常量目录 const 和 JSON 文件目录 json

项目使用纯 JavaScript 编写,未包含 Redux 状态管理等高级特性。

boyouquan-ui/
├── public/                    # 静态资源目录
│   ├── index.html             # 应用模板
│   └── assets/                # 静态文件目录
├── src/                       # 源代码主目录
│   ├── const/                 # 常量目录
│   ├── components/            # 可复用组件目录
│   │   ├── ...                # 其它组件
│   │   └── blog/              # 博客详情页组件目录
│   │       └── BlogCharts.js  # 博客详情页图表组件
│   ├── json/                  # 静态 JSON 配置
│   ├── pages/                 # 页面级组件
│   │   ├── HomePage.js        # Home 页面
│   │   ├── ...                # 其它页面
│   │   └── AboutPage.js       # 关于页面
│   ├── utils/                 # 工具函数
│   ├── App.js                 # 根组件,其中包含路由配置
│   └── index.js               # 应用入口(渲染 React 根节点)
├── .gitignore                 # Git 忽略规则
├── package.json               # 项目信息与依赖配置
├── README.md                  # 项目说明文档
├── babel.config.js            # Babel 转译配置文件
├── webpack.config.js          # Webpack 配置文件
└── .env                       # 环境变量文件

结合项目的目录结构,接着看一下项目的整体架构。

boyouquan-ui 的整体架构

抛去入口 index.js 和路由 App.js 外,项目其实仅分两层:Page 层和可复用组件层。Page 层包含各个页面,其会调用组件层的可复用组件以及各种 Utils 来实现对应页面的功能。

2 人工将项目升级为 TypeScript 实现的话有哪些修改点?

介绍完项目的整体架构后,下面初步想一下,若是采用传统人工的方式将项目升级为 TypeScript 实现的话会有哪些修改点?

想了一下,整体来看,我们需要将各个与 React 相关的组件由 JS 改为 TSX;Babel 和 Webpack 需要支持 TS 和 TSX;其它 .js 文件需要改为 .ts 文件。

React (JS) + Babel + Webpack + .js
=>
React (TSX) + Babel + Webpack + .ts

修改的步骤大概如下:

  • a)修改 package.json,安装 TypeScript 及类型定义包,如 typescript@types/react 等;
  • b)添加 TypeScript 配置文件 tsconfig.json
  • c)修改 Babel 和 Webpack 配置文件以支持 .ts.tsx,如启用 @babel/preset-typescript
  • d)修改源码文件后缀 .js.ts.jsx.tsx,改名后适配类型声明;
  • e)修复类型错误、补全类型定义;
  • f)可选:引入 ESLint 和 TypeScript 插件。

这个步骤梳理好后,放在这,等最后和 Cursor 实际使用的步骤做对比。

3 用 Cursor 将项目升级为 TypeScript 实现

现在,我们就使用 Cursor 打开 boyouquan-ui 项目,然后指派其帮我们自动将项目升级为 TypeScript 实现。

使用的提示词如下:

当前工程 boyouquan-ui 是一个使用 JavaScript 编写的标准 React 工程,请认真分析工程的代码结构,然后在不改动原先业务逻辑的情况下参考业界最佳实践在技术层面将该工程改用 TypeScript 编写。改造完成后,在根目录生成一个 summary.md,详细描述你的改造点。

考虑到这个升级的规则比较简单,也不涉及项目的专有知识,大语言模型拥有的公开知识应当能胜任。所以我使用的提示词非常简单,就一句话,没有给步骤、没有给参考样例、没有指定具体的修改规则,怎么做就交由 Cursor 去思考吧。

用 Cursor 将项目升级为 TypeScript 实现

3.1 Cursor 罗列的步骤

指令发送后,Cursor 即开始干活了。

  • a)首先,Cursor 遍历了项目的各个目录和主要文件,了解了项目的整体结构和代码风格;

  • b)接着,Cursor 生成了 TODO List;

    安装 TypeScript 相关依赖包
    创建 tsconfig.json 配置文件
    更新 webpack.config.js 以支持 TypeScript
    更新 babel.config.js 以支持 TypeScript
    更新 package.json 入口和脚本
    转换核心文件 (index.js, App.js) 为 TypeScript
    转换所有页面组件 (pages/) 为 TypeScript
    转换所有业务组件 (components/) 为 TypeScript
    转换工具函数 (utils/) 为 TypeScript
    转换常量文件 (const/) 为 TypeScript
    创建类型定义文件 (types/)
    生成 summary.md 文档
    
  • c)最后,Cursor 按照 TODO List 中的步骤一步一步完成了任务。

3.2 Cursor 具体使用的方法

看过 Cursor 整理的步骤后,下面看看各个主要的步骤里,Cursor 具体使用了哪些方法来完成任务?

Cursor 在修改 js 文件后缀为 tsx/ts 时,没有将项目中所有文件一股脑的进行修改,而是按照上述 TODO List 中的模块依次而来,而且在修改前会使用 Shell 命令统计待修改文件数目。

修改时,若对应的模块中的文件只需要换一下后缀,就编写一个 Shell 脚本(convert_xxx.sh),然后调用脚本来进行批量修改。

Cursor 使用 Shell 来进行批量修改

若对应的模块中的文件除了更改后缀后,还需要添加 TypeScript 类型定义等代码时,就编写一个 Python 脚本(convert_to_ts.py)来实现。

Cursor 使用 Python 来进行批量修改

可以看到,Cursor 还是「很会做事」的。

3.3 Cursor 生成的报告

约 10 余分钟后,任务完成,虽有一些小的错误,但稍作修正后整个项目即能正常运行,Cursor 的整个升级结果还是很靠谱的。

如下是 Cursor 按照要求生成的报告 summary.md。可以看到它详尽的列出了各个修改点,并且还给了后续优化建议。核对这个清单,我们能明确知道它做了什么。

Cursor 生成的报告

至此,Cursor 完整的帮我将 boyouquan-ui 由 JavaScript 升级为了 TypeScript,完整 PR - github.com/leileiluoluo/boyouquan-ui/pull/415

4 Cursor 做的和人工做的有什么差别?

对比人工梳理的步骤和 Cursor 使用的步骤,整体差别不大。但若使用人工的方式做的话,可能会在编辑器中手动一个文件一个文件修改,而 Cursor 有分析和批量修改的思维,并且需要 Shell 脚本或 Python 脚本时能信手拈来,这个算它的一个强项。

5 小结

综上,本文首先介绍了使用纯 JavaScript 编写的 boyouquan-ui React 工程的整体架构,然后抛出了想实现的任务 —— 将 JavaScript 升级为 TypeScript。

接着,梳理了一下如果使用人工的方式将其转换为 TypeScript 实现的话有哪些修改点?

接着,体验了一下 Cursor,尝试使用它来将该 JavaScript 工程自动转换为 TypeScript 实现。

最后,对比了 Cursor 的修改点和人工梳理的修改点,以及 Cursor 优于人的地方。

最后的结论是诸如 Cursor 的 AI 工具在完成一个上下文明确的简单任务时还是很得心应手的。

参考资料

[1] Cursor: The best way to code with AI - https://cursor.com/en-US