开启 strictnullchecks 后未报错,需确认 vscode 加载的是项目根目录下的 tsconfig.json、选用工作区 typescript 版本、重启 ts 服务,并显式设置 "strict": true 和 "strictnullchecks": true。

strictNullChecks 开启后没报错?先确认 TS 服务加载的是你的配置
VSCode 不会自动读取任意位置的 tsconfig.json。如果打开的文件夹不是项目根目录(即不包含 tsconfig.json 的最外层文件夹),它就根本不会启用任何严格检查,strictNullChecks 更是形同虚设。
常见错误现象:
- 状态栏右下角显示
TS x.x.x (Bundled)—— 表示 VSCode 在用内置旧版 TS,完全忽略你本地的配置 - 编辑器对
obj?.prop或obj!.prop没反应,也不标红Object is possibly 'undefined' -
tsconfig.json改了,已打开的文件里错误不更新(需手动重启 TS 服务)
实操建议:
- 确保 VSCode 打开的是包含
tsconfig.json的**项目根目录**,不是src/或packages/my-lib/这类子路径 - 按
Ctrl+Shift+P(macOS 是Cmd+Shift+P),输入并执行TypeScript: Select TypeScript Version,选Use Workspace Version - 检查
tsconfig.json语法是否合法:不能有尾随逗号、不能有 JS 风格注释(//)、JSON 字符串必须双引号 - 执行
TypeScript: Restart TS server,等几秒再看报错是否出现
strictNullChecks 单独开启还是配合 strict?推荐显式声明
"strict": true 会启用包括 strictNullChecks 在内的一组检查,但某些构建工具或旧版 TS 可能只识别显式字段。只写 "strict": true 而不写 "strictNullChecks": true,在部分工作区中会导致空值检查静默失效。
实操建议:
- 在
tsconfig.json的compilerOptions中,**同时设置**:{"strict": true,"strictNullChecks": true} - 不要依赖
strict的“隐式覆盖”——它不保证所有子选项都被语言服务识别为启用状态 - 若已有其他
strict*选项(如strictFunctionTypes),保持它们显式为true,避免被父级strict的解析逻辑绕过
报错不出现?检查文件是否被 tsconfig 包含、是否被排除
即使 tsconfig.json 正确,VSCode 也只对 include、files 列出的路径做类型检查;而 exclude 里的路径(比如 node_modules)哪怕有 .ts 文件,也不会触发 strictNullChecks。
常见错误现象:
- 在
src/utils.ts里写let x: string = maybeUndefined;,但没报错 - 新建的
.ts文件第一次保存时不提示空值问题
实操建议:
- 确认
tsconfig.json中有明确的"include": ["src/**/*"](或类似路径),且该路径覆盖你的文件 - 避免只靠默认行为:tsc 初始化时若没指定
--init参数,生成的配置可能不含include,导致实际无文件被检查 - 检查是否有父级
tsconfig.json被意外继承(比如 monorepo 中上层配置覆盖了当前包),可临时重命名父级配置验证
为什么改了 tsconfig 后报错延迟或不出现?这是设计使然
VSCode 的 TypeScript 语言服务不会监听 tsconfig.json 文件变更并自动重载。它只在启动时读一次,之后所有已打开文件都沿用初始配置,直到你手动干预。
最容易被忽略的点:
- 修改
tsconfig.json后,不重启 TS 服务 → 错误不会刷新 - 只改了
strictNullChecks,但没删掉"skipLibCheck": true→ 第三方类型定义里的空值问题仍被跳过(不影响你自己代码,但容易误判效果) - 文件顶部写了
// @ts-nocheck→ 整个文件类型检查被禁用,strictNullChecks完全不生效
实操建议:
- 每次改完
tsconfig.json,务必执行TypeScript: Restart TS server - 想临时跳过某行检查,用
// @ts-ignore,而不是全局关检查 - 检查文件首行是否误加了
// @ts-nocheck(尤其从模板复制来的文件)











