Sublime Text 的 TypeScript 类型检查完全依赖 tsserver 进程和正确加载的 tsconfig.json;若无报错、跳转失效或模块解析失败,通常是 tsserver 未启动、路径未配置、tsconfig.json 缺失或未被识别所致。

Sublime Text 本身不提供 TypeScript 自动检查能力,所有类型报错、未定义变量提示、模块解析失败警告,都依赖 tsserver 进程 + 正确加载的 tsconfig.json。装完插件却没报错?不是插件坏了,是 tsserver 没连上,或配置根本没被读到。
为什么打开 .ts 文件没报错也没跳转
这是最常卡住人的第一步:有语法高亮,但 Ctrl+Click 跳不到定义、any 类型不标黄、import 报 Cannot find module——本质是语言服务没启动成功。
-
tsserver命令在终端能运行(tsserver --version有输出),但在 Sublime 里静默失败:大概率是插件没找到tsserver,尤其用了nvm/fnm/volta时,Sublime 启动时读的 PATH 和你终端不一致 - 项目根目录下没有
tsconfig.json:tsserver会退化为“无配置模式”,几乎不校验类型、忽略compilerOptions里的strict、baseUrl、paths - 右下角显示的是
TypeScriptReact或JavaScript:说明文件没关联对语法,TypeScriptSyntax插件可能装了但没生效,或被手动锁定过语法(用Set Syntax: Detect Syntax命令重置)
如何确认 tsserver 真正跑起来了
别只看有没有高亮,得进控制台看日志。按 Ctrl+`(反引号)打开 Sublime 控制台,操作后观察输出:
- 出现
Could not start server: Error: spawn tsserver ENOENT→tsserver路径错误,必须在插件 Settings 里显式填tsserver_path(例如/Users/xxx/.nvm/versions/node/v20.15.0/bin/tsserver) - 出现
Starting tsserver with: [...]且后面跟着Info 0: [...]日志 → 服务已启,但后续没报错?立刻检查当前视图是否在项目根目录下打开(tsserver默认只从打开的文件所在目录向上找tsconfig.json) - 没任何
tsserver相关日志 → 插件根本没触发,确认是否打开了.ts文件,且右下角语法名确实是TypeScript(不是Plain Text)
tsconfig.json 不生效的典型场景
即使 tsserver 跑着,tsconfig.json 也可能被忽略。常见于以下情况:
使用 Scrapfly SDK(scrapfly-sdk)在 TypeScript 或 JavaScript 中进行网页抓取,用于用户请求抓取 URL、绕过反爬虫防护、渲染页面等场景。
-
moduleResolution设为node16或bundler,但项目里混用旧版 Node 模块写法(如require('./utils')),tsserver会直接放弃解析整个 import 链 - 用了路径别名(
@/components),但tsconfig.json里漏了baseUrl或paths,或baseUrl指向了错误目录(它必须是相对于tsconfig.json的路径) - 文件在子目录打开(比如直接双击
src/index.ts),而tsconfig.json在上层project-root/,此时tsserver找不到配置,降级为默认行为 - 配置里写了
"include": ["src/**/*"],但当前编辑的文件不在src下(比如临时测试文件放在根目录),tsserver就不检查它
要不要配 SublimeLinter?配哪个
要,但目的得区分清楚:tsserver 负责类型层面的检查(string 赋值给 number、未导出成员访问),SublimeLinter 是跑 ESLint 或 TSLint 做代码风格和潜在逻辑问题扫描(比如 console.log 漏删、函数太长)。
- 如果项目用
eslint+@typescript-eslint:装SublimeLinter-eslint,确保项目根有.eslintrc.js,且parser设为'@typescript-eslint/parser' - 如果还在用已废弃的
tslint:装SublimeLinter-tslint,并手动指定tslint可执行路径(linters.tslint.executable),否则容易找不到命令 - 别两个都装:规则冲突会导致部分错误不显示,尤其是同一条语句既被
tsserver标红又被tslint标黄时,SublimeLinter 可能直接吞掉其中一种
真正难调的从来不是装插件,而是让 tsserver 稳定读到你写的那行 "baseUrl": "./"。路径错一位、Node 版本切一次、甚至只是没在项目根目录打开 Sublime,都会让整套类型检查失效——而且它不报错,就安静地当个高级文本编辑器。










