TypeScript 严格类型检查由 tsconfig.json 的 "strict" 等编译选项控制,VSCode 仅读取该配置;需确保其位于项目根目录、启用关键子选项、选用工作区 TS 版本并重启 TS 服务器以生效。

TypeScript 的严格类型检查不是靠 VSCode 配置开启的,而是由 tsconfig.json 中的 "strict" 及相关编译选项控制的;VSCode 只是读取并响应这些配置。
确认项目根目录下存在有效的 tsconfig.json
VSCode 的 TypeScript 语言服务完全依赖项目中的 tsconfig.json。没有它,或它位于错误路径(比如不在打开的文件夹根目录),VSCode 就不会启用严格检查。
- 必须在 VSCode 打开的最外层文件夹中放置
tsconfig.json,否则tsc和 VSCode 都可能忽略它 - 如果项目含多个子包(如 Lerna/Yarn workspace),每个需要类型检查的包都应有自己的
tsconfig.json - 可运行
tsc --init生成默认配置,再手动启用严格选项
启用 "strict" 及其关键子选项
"strict": true 是开关,但它背后是一组独立可调的检查项。只开 "strict" 不一定看到全部效果——某些检查(如 "noImplicitAny")可能被其他配置覆盖或禁用。
- 推荐显式列出关键严格项,避免隐式行为干扰:
{ "compilerOptions": { "strict": true, "noImplicitAny": true, "strictNullChecks": true, "strictFunctionTypes": true, "strictBindCallApply": true, "strictPropertyInitialization": true, "alwaysStrict": true } } -
"strictPropertyInitialization"在类中要求所有非可选属性都有初始值或在构造函数中赋值;若用declare或!:断言,需确保逻辑合理 -
"strictNullChecks"会让null和undefined不再自动属于每个类型的值域,这是最常引发编译错误的选项
VSCode 中实时反馈不生效?检查 TS 版本和插件状态
即使 tsconfig.json 正确,VSCode 也可能沿用旧版本 TypeScript 服务,或加载了工作区外的全局配置。
- 按下
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS),输入Typescript: Select TypeScript Version,选择Use Workspace Version(即node_modules/typescript中的版本) - 检查状态栏右下角:点击 TS 版本号,确认显示的是项目本地安装的版本,而非
Bundled - 关闭并重启 VSCode,或执行
Developer: Reload Window,确保配置重载 - 如果使用 TypeScript 插件(如 ESLint 插件),注意它不参与编译检查,仅提供额外规则;严格类型检查仍由 TS 语言服务完成
最容易被忽略的是:修改 tsconfig.json 后,VSCode 不会自动重新校验已打开的文件。要么保存该配置文件后手动触发一次编辑(比如加个空格再删掉),要么重启 TS 服务器(Ctrl+Shift+P → Typescript: Restart TS server)。否则你看到的“没报错”,很可能只是缓存结果。










