vscode 中 strict 不报错是因为 typescript 语言服务未加载项目 tsconfig.json;需确认使用工作区 typescript 版本、tsconfig.json 位于根目录、语法正确、include/files 覆盖当前文件,并重启 ts server。

VSCode 里 strict 不报错,基本不是配置写错了,而是 TypeScript 语言服务压根没加载你的 tsconfig.json。
确认 VSCode 正在用项目本地的 TypeScript 版本
VSCode 默认可能用内置(Bundled)版本,它不读你项目的 tsconfig.json,也不认 strict 设置。
- 右下角状态栏点击
TS版本号,必须看到类似TS 5.4.2 (Workspace)—— 如果是Bundled或Node module,说明没生效 - 按
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS),运行TypeScript: Select TypeScript Version,选Use Workspace Version - 确保项目根目录已安装
typescript:npm install --save-dev typescript(否则 workspace 版本根本不存在)
检查 tsconfig.json 是否被正确识别和加载
VSCode 只会从当前打开的文件夹向上查找第一个 tsconfig.json。路径、语法、包含范围任意一项出错,strict 就等于没写。
-
tsconfig.json必须放在 VSCode 打开的**最外层文件夹**下,不能只打开src/子目录 - 运行
tsc --noEmit看是否报错:如果命令行能报 strict 相关错误,但 VSCode 不标红,就是加载问题 - 检查
include或files字段是否覆盖了你正在编辑的.ts文件,例如漏掉"src/**/*" - 删掉
tsconfig.json里的注释(JSON 不支持),逗号遗漏、引号不匹配等语法错误会让整个配置被静默跳过
启用 strict 后大量报错,但代码能跑?别关,先修
strict: true 是一揽子开关,等价于同时开启 noImplicitAny、strictNullChecks、strictFunctionTypes 等十多项检查。红波浪线不是 bug,是类型系统在告诉你“这里可能出 runtime 错误”。
-
Object is possibly 'undefined'→ 加?.或!,或提前判空 -
Parameter 'x' implicitly has an 'any' type→ 给参数加类型标注,如(x: string) => void -
Property 'xxx' has no initializer(类属性)→ 用!: string断言,或在 constructor 中赋值 - 不要用
// @ts-nocheck全局屏蔽,那等于把 X 光机关了再拍片;局部临时绕过可用// @ts-ignore
为什么改了 tsconfig.json 还不生效?
VSCode 的 TypeScript 语言服务不会自动监听并重载配置变更,尤其对已打开的文件。
- 改完
tsconfig.json后,必须手动重启 TS Server:Ctrl+Shift+P→TypeScript: Restart TS server - 或者保存配置后,在任意打开的
.ts文件里敲个空格再删掉,触发一次重校验 - 多根工作区中,每个子项目必须有自己的
tsconfig.json,父目录的配置不会向下透传 - 如果用了 pnpm 或 bun,
node_modules/typescript路径可能不标准,可在 VSCode 设置里手动指定typescript.tsdk路径
最容易被忽略的是:strict 开启后,node_modules 里的代码也会被检查——这通常是因为你在 include 或 files 里误包含了它,或没设 exclude: ["node_modules"]。这类报错不是你的问题,而是配置污染了检查范围。











