VS Code 对 TypeScript 支持开箱即用但不自动编译,需配置 tsconfig.json 并启用 tsc --watch 任务;严格模式、正确 outDir、exclude 和 moduleResolution 等设置确保开发与类型检查兼顾,保存即编译需配置 tasks.json 并重启 TS Server。

VS Code 对 TypeScript 的支持开箱即用,但默认不自动编译、不强制类型检查、不生成 js 文件——这些必须手动配。核心在于搞清 tsconfig.json 和 VS Code 的 tsc 任务分工。
为什么保存后没生成 .js 文件?
VS Code 自带的 TS 语言服务只做编辑时的类型提示和错误高亮,不运行编译器。要生成 JS,必须调用 tsc(TypeScript Compiler)。
-
tsc默认是“一次性编译”:运行一次,编译所有文件,然后退出 - 开发中更常用的是
tsc --watch模式:监听文件变化,自动重新编译 - VS Code 可以把
tsc --watch配成一个后台任务,保存即生效 - 前提是项目根目录有有效的
tsconfig.json,否则tsc不知道从哪开始、编译到哪去
如何配置 tsconfig.json 才能兼顾开发与类型检查?
别直接用 tsc --init 生成后就不管。默认配置太宽松,比如 "noImplicitAny": false 会掩盖大量潜在类型错误。
- 至少开启:
"strict": true(等价于启用noImplicitAny、strictNullChecks等一整套) - 指定输出目录:
"outDir": "./dist",避免 JS 和 TS 混在同一目录 - 排除非源码文件:
"exclude": ["node_modules", "dist"] - 如果用 ES 模块(
import/export),加上:"module": "ESNext"和"target": "ES2020" - 若需在 Node.js 运行,加:
"moduleResolution": "node"和"types": ["node"]
{
"compilerOptions": {
"target": "ES2020",
"module": "ESNext",
"lib": ["ES2020", "DOM"],
"strict": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"outDir": "./dist",
"rootDir": "./src",
"moduleResolution": "node",
"types": ["node"]
},
"include": ["src/**/*"],
"exclude": ["node_modules", "dist"]
}
怎么让 VS Code 在保存时自动编译并报错?
靠两层机制叠加:TS 语言服务实时检查 + tsc --watch 后台编译。两者独立运行,但都依赖 tsconfig.json。
- 类型错误会实时显示在 VS Code 编辑器底部状态栏和问题面板(
Ctrl+Shift+M) - 要启用保存即编译,打开命令面板(
Ctrl+Shift+P),运行Tasks: Configure Task→ 选择tsc: watch - 这会生成
.vscode/tasks.json,确保其中"isBackground": true和"problemMatcher": ["$tsc-watch"]存在 - 启动任务:
Ctrl+Shift+P→Tasks: Run Task→ 选tsc: watch;之后保存 TS 文件,dist目录就会更新 - 注意:
tsc --watch不会重新检查已关闭的文件,所以保持文件打开或重启 watcher
常见报错和对应处理方式
不是所有红色波浪线都要立刻改——得看来源。VS Code 底部状态栏会显示是「TS Server」还是「tsc」报的错。
-
Cannot find module 'xxx':多半是缺少@types/xxx,或types字段没包含该包 -
Property 'xxx' does not exist on type 'yyy':接口定义缺失,或对象字面量没显式标注类型(如const obj: MyType = { ... }) - 编辑器里没报错,但终端跑
tsc报错:说明 VS Code 正在用旧版本 TS Server,点击右下角 TS 版本号 → 选择 “Use Workspace Version” - 修改
tsconfig.json后不生效:重启 TS Server(Ctrl+Shift+P→TypeScript: Restart TS server)
最易被忽略的一点:VS Code 的类型检查和 tsc 编译虽然共享配置,但各自维护缓存。改完 tsconfig.json 或装了新类型包,务必重启 TS Server,否则编辑器里看着正常,实际编译会失败。










