VSCode本身不运行TypeScript,真正执行需tsc编译为JS后由Node.js运行,或借助ts-node在内存中即时转译;tsc默认只类型检查,须配置outDir/rootDir、禁用noEmit等才生成.js文件;调试.ts断点需launch.json正确设置runtimeArgs注入ts-node/register。

VSCode 本身不运行 TypeScript,所谓“直接运行 .ts 文件”,本质是靠 ts-node 在 Node.js 进程中做内存级转译——不是编译落地,也不是 VSCode 原生能力。配置错一个参数,断点就失灵、模块就找不到、类型错误就静默吞掉。
为什么 tsc 编译后没生成 .js 文件?
因为 tsc 默认只做类型检查,不输出代码。你得显式启用输出逻辑:
-
"outDir": "./dist"和"rootDir": "./src"必须成对出现,否则tsc不知道从哪读、往哪写 -
"noEmit": true(或未声明)会彻底禁用输出;检查compilerOptions里有没有这一项 -
"include"路径写错会导致“无文件可编译”:比如"src/**"缺少末尾*,或 Windows 风格的"src\**\*"(JSON 不认反斜杠) - 终端执行
tsc --noEmit false可强制开启输出,快速验证配置是否生效
launch.json 怎么配才能让断点打在 .ts 上?
关键不在 program 字段,而在 runtimeArgs 是否正确注入 ts-node 的加载逻辑:
完整的Galileo AI平台 TypeScript/JS SDK 参考,用于评估、观察和保护 GenAI 应用。适用于构建 Node.js 或 TypeScript 项目。
-
"runtimeExecutable": "node"(不是npx或ts-node) -
"runtimeArgs": ["--nolazy", "-r", "ts-node/register"]——-r是核心,漏掉就变纯 JS 执行,.ts断点全失效 -
"args": ["${workspaceFolder}/src/index.ts"],别用program指向.ts,那是给tsc编译流准备的 - 若项目设了
"type": "module",必须换 loader:--loader=ts-node/esm(Node.js ≥18.12)
tsconfig.json 哪些字段对 ts-node 生效?
ts-node 是运行时转译,不落地文件,所以 sourceMap、outDir、declaration 等输出相关配置完全无效:
- 真正起作用的只有解析类配置:
"moduleResolution": "node"(或"node16"/"nodenext"),否则路径别名(如@/utils)无法识别 -
"resolveJsonModule": true必须开,否则import pkg from './package.json'直接报错 -
baseUrl+paths会被读取,但ts-node不做路径重写,只按原始路径查,配错就静默失败 - 改完
tsconfig.json后,务必按Ctrl+Shift+P→ 输入TypeScript: Restart TS server,否则缓存会让断点映射错位
最常被忽略的一点:VSCode 右下角显示的 TypeScript 版本,只影响编辑器语言服务(跳转、提示),和 ts-node 运行时完全无关。调试报 TS2307 找不到模块?八成是 node_modules 里装的 typescript 和 ts-node 版本不匹配,或者 workspace 版本没手动选上。

















