vscode本身不编译typescript,必须安装tsc、配置有效tsconfig.json(含outdir、rootdir、sourcemap等)并用tasks.json设置isbackground:true的tsc --watch任务才能实现保存自动编译和调试。

tsc 或 ts-node;没配对 tsconfig.json 和任务系统,保存不会生成 .js,F5 调试会直接报 “Cannot launch program because corresponding JavaScript cannot be found”。
确认 tsc 可用且版本匹配
VSCode 不自带可执行的 tsc,它只负责调用。终端里 tsc --version 报错,或输出版本低于 5.0(比如 4.9),后续编译、sourceMap、路径解析都会出问题。
- 项目级安装最稳:
npm install --save-dev typescript,然后用npx tsc --version验证输出(如5.4.5) - 别信“装了插件就行”——VSCode 内置语言服务只做提示,不提供编译器二进制文件
- Windows 用户若终端找不到命令,关掉 VSCode 再重开一次,确保 PATH 刷新
- 全局安装(
npm install -g typescript)容易和项目版本冲突,尤其当你用pnpm或多项目共用时
tsconfig.json 必须存在且字段不能省略
空文件、仅 {}、或含 // 注释行,都会让 tsc 降级为单文件编译,忽略 outDir、include 等行为——结果就是 .js 根本不生成,断点跳不到源码。
- 在项目根目录运行
npx tsc --init生成基础配置,然后手动删掉所有//开头的注释行 -
"outDir": "./dist"和"rootDir": "./src"必须显式设置,且路径不能重叠(否则tsc可能把dist里的 .js 当源码二次编译) -
"sourceMap": true是调试前提,但必须配合"inlineSourceMap": false(二者配对才有效) -
"include": ["src/**/*"]要加引号、用正斜杠;写成src\**\*或漏引号,文件就不参与编译 - 如果用了
"noEmit": true,tsc --watch也不会输出 .js——这是调试时最常见的隐形陷阱
用 tasks.json 绑定 tsc --watch 实现保存即编译
VSCode 默认不监听文件变化。按 Ctrl+Shift+B 手动触发不够快,真正自动编译靠的是后台运行的 tsc --watch 任务,而它必须通过 .vscode/tasks.json 正确接入。
- 按
Ctrl+Shift+P→ 输入Tasks: Configure Task→ 选Create tasks.json from template→Others - 填入以下结构,重点核对
"isBackground": true和"problemMatcher": "$tsc-watch":
{
"version": "2.0.0",
"tasks": [
{
"label": "tsc: watch",
"type": "shell",
"command": "npx tsc",
"args": ["--watch"],
"isBackground": true,
"problemMatcher": "$tsc-watch",
"group": "build"
}
]
}
-
"isBackground": true缺失 → 任务启动后立刻退出,无法监听 -
"problemMatcher": "$tsc-watch"缺失 → 错误只显示在终端,不会标红、不会出现在“问题”面板 - 配置完后按
Ctrl+Shift+B→ 选tsc: watch,终端应输出Found 0 errors. Watching for file changes.
launch.json 断点失效的常见原因
VSCode 调试器靠 .js.map 把运行时位置映射回 .ts 源码。sourceMap: true 只是第一步,launch.json 的路径匹配错了,断点就永远“未绑定”。
-
"program"必须指向编译后的.js文件(如"${workspaceFolder}/dist/index.js"),不是.ts -
"outFiles"要匹配实际输出路径,比如"${workspaceFolder}/dist/**/*.js";写成./out/**/*.js就找不到 - 务必加
"preLaunchTask": "tsc: watch",否则 F5 前没编译,自然找不到对应 .js - 如果用了
ts-node直接跑.ts,就别配outFiles和program,改用"type": "pwa-node"+"runtimeExecutable": "npx"+"args": ["ts-node", "${file}"]
npx tsc 用的不是同一个——点击它,选 Use Workspace Version,再手动 Ctrl+Shift+P → TypeScript: Restart TS server。











