VS Code 启用 TypeScript 需项目根目录存在有效 tsconfig.json,否则仅语法高亮;须确认 TS Server 加载正确版本、重启服务、路径别名配置合规、格式化规则统一,三要素(状态栏版本、模块识别、跨文件提示)全满足才算启用成功。

VS Code 里没提示 tsconfig.json,TypeScript 就算没真正启用
VS Code 默认只做基础语法高亮,不自动开启 TypeScript 的类型检查和智能提示。关键不是装了 Node 或 TypeScript,而是项目根目录下要有有效的 tsconfig.json——否则编辑器根本不知道该按什么规则解析 .ts 文件。
常见错误现象:any 类型泛滥、import 提示“无法找到模块”、函数参数没提示、重命名不跨文件生效。
- 新建项目时用
tsc --init生成默认配置,别手动空建 - 确保
tsconfig.json在工作区根目录(不是子文件夹),VS Code 才会自动识别 - 如果用了多根工作区,每个文件夹都要有自己独立的
tsconfig.json,不能共用一个 - 检查
compilerOptions.target和lib是否匹配运行环境,比如写浏览器代码却设"target": "ES2022"+"lib": ["ES2022"],老版 Chrome 就会报错但编辑器不提醒
tsc 命令能跑通,但 VS Code 里红标一堆
这是典型“TS Server 没加载对配置”的表现。VS Code 内置的 TypeScript 语言服务(TS Server)默认用自己带的 TS 版本,不一定和你本地 tsc 一致,更不一定读你项目里的 tsconfig.json。
- 右下角状态栏点 TypeScript 版本号,选 “Use Workspace Version”,强制它读
node_modules/typescript - 按
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(Mac),搜 “TypeScript: Restart TS server”,每次改完tsconfig.json都要重启一次 - 确认
tsconfig.json里没写错路径,比如"include"漏了src/**/*,或者"exclude"误把types文件夹干掉了 - 如果用了
pnpm或bun,node_modules/typescript可能不在预期位置,VS Code 有时找不到——此时手动在设置里指定typescript.tsdk路径更稳
为什么 import 路径别名(如 @/utils)在 VS Code 里不跳转
VS Code 的路径别名支持完全依赖 tsconfig.json 的 compilerOptions.baseUrl 和 paths,而且只认绝对路径映射,不认 Webpack/Vite 的别名配置。
-
baseUrl必须是相对tsconfig.json的路径,通常设为".";paths的 key 必须带结尾/*,value 也要以/*结尾,例如:"@/*": ["src/*"] - 别名只对 TypeScript 有效,JS 文件(
.js或.jsx)默认不走 TS 解析,需额外加"allowJs": true和"checkJs": true - 如果用 ESM(
type: "module"),确保tsconfig.json里"moduleResolution"设为"bundler"(TS 5.0+)或"node16",否则别名解析失败 - Vite 或 Next.js 项目常把
tsconfig.json放在子目录(如apps/web/tsconfig.json),这时必须打开该子目录为根工作区,否则 VS Code 根本不读它
保存时自动格式化但删了分号、改了引号,怎么关掉或统一规则
VS Code 默认用 Prettier 或内置格式化器处理 TypeScript,但它的行为和你终端里 tsc 编译、eslint 检查是两套逻辑,容易打架。
- 关掉自动格式化:设置里搜
formatOnSave,把它设为false;或只对特定语言关,加一句"[typescript]": {"editor.formatOnSave": false} - 想保留分号?在
tsconfig.json里加"compilerOptions.noImplicitReturns": true没用——那是编译选项;得靠prettier.config.js设semi: true,再让 VS Code 用 Prettier 当默认 formatter - 最省事的做法:删掉所有格式化相关插件,只留 ESLint 插件,并在设置里开
eslint.format.enable,这样保存时只按 ESLint 规则修,不会动缩进/空行/引号这些 - 注意
editor.defaultFormatter设置可能被工作区设置覆盖,检查设置右上角图标是不是显示 “Workspace”
Cannot find module 这类错误、以及跳转/重命名/类型提示是否跨文件生效——这三件事任一失败,八成是 tsconfig.json 没被识别,或者 TS Server 没加载对版本。


















