根本原因是typescript语言服务未加载tsconfig.json:需确保vscode打开项目根目录、右下角显示workspace版本、tsconfig.json语法正确且无注释、include覆盖当前文件、重启ts server。

VSCode 为什么没标红 strict 相关错误
根本原因不是配置写错了,而是 TypeScript 语言服务压根没加载你的 tsconfig.json。VSCode 只会从当前打开的文件夹向上查找第一个 tsconfig.json,且必须满足:文件在项目根目录、命名严格为 tsconfig.json(大小写敏感)、内容非空、无 JSON 语法错误(比如尾随逗号、单引号、// 注释)。
- 打开 VSCode 时,务必用
code .在包含tsconfig.json的**最外层文件夹**下启动,不要只打开src/或packages/ui/ - 右下角状态栏点击 TypeScript 版本号,确认显示的是类似
TS 5.4.2 (Workspace),而不是Bundled或Node module - 如果没看到 Workspace 选项,先运行
npm install --save-dev typescript,再重启 VSCode - 改完
tsconfig.json后,必须手动执行Ctrl+Shift+P→TypeScript: Restart TS server,否则缓存不变,错误不更新
strict 开启后大量报错,但代码能跑?别关,先修
"strict": true 是一揽子开关,等价于同时启用 noImplicitAny、strictNullChecks、strictFunctionTypes 等十多项检查。红波浪线不是 bug,是类型系统在指出潜在 runtime 风险。
-
Object is possibly 'undefined'→ 用?.、!,或提前if (x)判空 -
Parameter 'x' implicitly has an 'any' type→ 显式标注,如(x: string) => void -
Property 'xxx' has no initializer(类属性)→ 用xxx!: string断言,或在constructor中赋值 - 避免全局加
// @ts-nocheck,它等于关掉 X 光机再拍片;临时绕过可用// @ts-ignore,但仅限单行
为什么只写 "strict": true 还是不生效
某些构建工具或旧版 TypeScript 语言服务不会“自动推导” strict 开启的子项是否实际启用。尤其 noImplicitAny 和 strictNullChecks 容易静默失效。
- 在
compilerOptions中显式写出关键子项,不要只依赖strict总开关: "strict": true"noImplicitAny": true"strictNullChecks": true"strictFunctionTypes": true"alwaysStrict": true- 删掉
tsconfig.json里的所有//注释——JSON 不支持,会导致整个配置被跳过
include/files 没覆盖当前文件,strict 就等于没开
VSCode 的 TypeScript 语言服务只对 include 或 files 字段列出的路径做检查。哪怕 strict 全开,漏配路径就完全不触发。
- 常见漏配:
"include": ["src/**/*"]但测试文件在test/下,就得补上"test/**/*" - 用了
exclude却误删了"node_modules",导致@types包冲突,语言服务卡住、不报错 - 多包项目(monorepo)中,每个子包需各自有
tsconfig.json,并单独用code ./packages/ui打开该目录作为工作区 - 运行
npx tsc --noEmit命令行验证:如果命令行能报 strict 错误,但 VSCode 不标红,基本就是路径未包含或配置未加载
tsc、vitest typecheck)各自读各自的 tsconfig.json,它们可能不在同一位置,也可能被不同 extends 覆盖。改一个地方,得同步确认两边是否一致。











