在VSC上使用Typecript刷LeetCode
前言
最近开始学习 TS 了,刚巧又在刷题。于是想到能不能像 C++ 一样用 TS 在 VSC 上刷 LeetCode 呢?这种做法似乎不算很常规——TS 一般的用途还是做 App。实际搭建的过程也遇到了一点麻烦,所以做个记录。
安装
想到这篇博文的主题,是因为发现了这个 LeetCode 官方插件:
LeetCode - Visual Studio Marketplace
它允许在 VSCode 上查看题目、提交代码。
这样做还是挺有优点的,毕竟 LeetCode 不像牛客,没有会员无法在线调试。而且我们也可能希望把写过的题目源码保存在本地。
总之,我们需要安装 VSC、LeetCode 插件、以及 TypeScript
、Node.js
等等不提。
此外,我们还可以建立一个工作区 (WorkSpace
)以便于管理。在这里,我的处理是将不同语言的 LeetCode 刷题代码放在工作区内不同的子文件夹内,例如 Typescript 刷题的代码可能被保存在 LeetCode/Typescript
下,而 C++的刷题代码则在 LeetCode/Cpp
下。下面,我们称呼工作区所在的文件夹 LeetCode
为 父文件夹
,LeetCode/Typescript
为子文件夹
。
最后,一般来说,TypeScript 编译后会生成对应的 .js
文件,然后可以利用 node
等来调试 .js
文件:
1 | % 编译 %% |
这样当然没错,但是这样没有办法很好的可视化调试,并且会生成 js
文件,让文件夹显得很乱。编译出来的 js 文件甚至会和原始 ts 文件函数命名冲突导致报警告——因为默认情况下它们都属于同一个项目。
其实也有在工作区中隐藏
.js
文件的方法,详见参考文献 1。
为此,我们需要使用 ts-node 包。它可以不经编译直接运行 TypeScript 代码,并且支持单文件脚本。
在 TypeScript 子文件夹下运行(其实在工作区 主目录
运行也行,只是在 子目录
的话就不会暴露 node_modules
了):
1 | pnpm add ts-node |
调试配置
首先,我们需要添加一个 tsconfig.json
。完全可以参照 参考文献 1
让 VSCode 自动生成,不过也可以自己写,内容参考如下(由我的 VSCode 生成):
1 | { |
可以放在 父文件夹
中,也可以放在 子文件夹
中。
然后,在 .vscode/launch.json
文件(可以由 运行与调试
侧栏中生成,也可以自行创建)中添加任务如下:
1 | "configurations": [ |
其实意思就是在 ${workspaceFolder}/Typescript(
子文件夹 )下运行
node -r ts-node/register <当前ts文件>`。
然后,我们就可以愉快地打断点进行调试了。虽然此时不会像 C/C++
那样显示一个按钮以供编译运行,但是我们直接按 F5
就可以正常调试运行了。
LeetCode 插件配置
我们还需要调整一下 LeetCode 配置。
ctrl+shift+P
打开设置后,切换到 用户设置
,搜索 Leetcode: Endpoint
可以切换提交站点为 中国站
或 国际站
。然后现应地登录账号。
搜索 Leetcode: File Path
打开 用户设置
对应的 .json
文件,添加配置如下
1 | "leetcode.filePath": { |
这表示 LeetCode 插件为我们生成待完成的代码文件时,会把 Typescript 语言的文件生成在 \\Typescript
这个子文件夹下,文件名为 序号.名字.拓展名
的形式。
如果你遵循和我一样的文件名生成方法,并且使用
中国站
,那么由于文件名包含中文字符,我们就无法正常进行调试了。这种情况下,我的解决方案是建立一个不包含中文字符的
debug.ts
,如果由调试需要,就将代码拷贝到该文件下调试。当代码确认没有问题后,再拷回文件存档。这样做的好处是保留了做过的题的名字,方便查找。如果你觉得这个没必要,那么也可以不做这一步。
参考文献
- 编译 TypeScript – Compiling TypeScript – VSCode 文档
- DeepSeek 的帮助