VSCode不编译TypeScript,仅做语义检查;需配置tsconfig.json、运行tsc或启用watch模式,并统一TS版本、正确设置sourceMap和include路径以确保编译、类型检查与调试协同正常。

VSCode 本身不编译 TypeScript,它依赖 tsc 或构建工具(如 ts-node、esbuild)完成编译和类型检查;调试则靠 launch.json 配合 sourcemap。关键不是“VSCode 怎么做”,而是你选的 TypeScript 工作流是否与编辑器协同正确。
为什么改了 .ts 文件没报错、也没生成 .js?
因为默认情况下,VSCode 只做「语义检查」(基于 typescript.tsdk),不运行 tsc。要触发实际编译,必须显式配置:
- 在项目根目录放
tsconfig.json(哪怕只写{"compilerOptions": {"noEmit": false}}) - 手动执行
tsc(需全局或本地安装typescript) - 启用 TS 自动编译:终端运行
tsc -w(watch 模式),或在 VSCode 中按Ctrl+Shift+B触发构建任务(需先配置tasks.json) - 注意:
noEmit设为true时,tsc只检查类型、不输出 JS——这是常见误配点
如何让 VSCode 的类型提示和错误检查和 tsc 保持一致?
VSCode 内置的 TS 语言服务默认使用自身打包的 TypeScript 版本,可能和你项目里 node_modules/typescript 不同。版本不一致会导致类型提示“看起来对但 tsc 报错”。
- 打开命令面板(
Ctrl+Shift+P),运行TypeScript: Select TypeScript Version - 选
Use Workspace Version(即node_modules/typescript) - 确认
tsconfig.json中"include"正确覆盖源码路径(例如["src/**/*"]),否则部分文件不会被语言服务加载 - 如果用了
paths别名,确保"baseUrl"和"paths"同时存在且合法,否则跳转定义失效
调试时断点不命中、显示“Unbound breakpoint”?
本质是 sourcemap 路径没对上。VSCode 的 Node.js 调试器靠 sourceMaps: true 和正确的 outFiles / resolveSourceMapLocations 定位原始 TS 文件。
-
tsconfig.json必须含:"sourceMap": true,且"outDir"明确(如"dist") -
.vscode/launch.json中:{ "type": "node", "request": "launch", "name": "Launch via NPM", "runtimeExecutable": "npm", "runtimeArgs": ["run", "start"], "sourceMaps": true, "outFiles": ["${workspaceFolder}/dist/**/*.js"] } - 若用
ts-node调试,launch.json改用"type": "pwa-node",并加"runtimeArgs": ["-r", "ts-node/register"];此时无需outFiles,但必须保证ts-node版本 ≥ 10.9.0(旧版 sourcemap 支持不全)
最常被忽略的是 tsconfig.json 的 include 和 exclude 组合——它既影响 tsc 编译范围,也决定 VSCode 语言服务是否感知该文件。一个没被 include 的 .ts 文件,VSCode 里连基础类型提示都不会有。










