VS Code 不执行严格模式检查,实际由 tsconfig.json 配置和 TypeScript 编译器版本决定;需显式启用 strict 子项、确保配置被正确加载、避免 @ts-ignore 和 any 滥用,并配合类型注解才能生效。

VS Code 本身不执行严格模式检查,它只是把本地 tsc 的诊断结果渲染出来;真正起作用的是你项目里的 tsconfig.json 配置和 TypeScript 编译器版本。
strict 选项不是“一键全开”,得看子项是否实际生效
"strict": true 是个总开关,但它依赖底层子选项被语言服务识别并启用。某些编辑器或构建工具(比如旧版 VS Code 或自定义 webpack 插件)可能只读取显式声明的字段,忽略 strict 暗含的默认值。
- 推荐显式列出关键子项,避免隐式行为被跳过:
"noImplicitAny": true、"strictNullChecks": true、"strictFunctionTypes": true、"strictBindCallApply": true -
"strictPropertyInitialization"在类中很关键,但若用了装饰器(如@observable)或构造函数逻辑复杂,仅设为true不够,还得配合!断言或初始化赋值 -
"alwaysStrict"影响this类型推导,尤其在箭头函数和普通函数混用时,漏配会导致意外的any类型
VS Code 显示不出错误?先查 tsconfig.json 是否被正确加载
即使配置写对了,VS Code 也可能完全“看不见”这些规则——根本原因常是配置没被读到。
- 检查文件是否在
include或files范围内:比如"include": ["src/**/*"]会漏掉test/下的文件 - 多层目录下存在多个
tsconfig.json:VS Code 按路径向上查找最近的一个,父目录的配置可能意外覆盖当前项目 - 文件顶部有
// @ts-nocheck:整文件跳过类型检查,删掉或换成// @ts-ignore(仅忽略下一行) - 状态栏右下角显示的是
TS Bundled而非工作区版本:说明 VS Code 正在用内置旧版tsc,执行命令面板中的TypeScript: Select TypeScript Version并选Use Workspace Version
问题面板空空如也,但终端里 tsc 报一堆错?这是路径映射断了
VS Code 的问题面板只显示语言服务器(TS Server)上报的诊断,而终端里 tsc --noEmit 是独立运行的。两者不一致,大概率是 TS Server 没加载对配置或文件。
- 执行
TypeScript: Restart TS server(命令面板),清除缓存后重载 - 打开输出面板(
Ctrl+Shift+U),切换到TypeScript日志,看是否有Failed to load tsconfig.json或File is not included in project类提示 - 如果用符号链接打开工作区,确认设置中启用了
files.followSymlinks: true - 检查当前打开的是整个项目根目录,而不是单个
.ts文件——后者会导致 TS Server 找不到tsconfig.json
strict 启用后,某些错误反而不报了?小心 @ts-ignore 和 any 泛滥
开启严格模式后,部分原有代码会突然爆红,但开发者常随手加 // @ts-ignore 或补 : any 来“压住”错误。这看似解决问题,实则让类型系统形同虚设。
-
// @ts-ignore应只用于临时绕过已知、待修复的边缘 case,不能批量出现在业务逻辑中 - 大量
: any注解会污染类型流,导致后续调用处无法获得有效提示,比如arr.map(x => x.id)中x是any,id就不会被校验 - 更安全的替代:用联合类型(
string | number)、类型守卫(if (typeof x === 'string'))或接口明确描述结构
最易被忽略的一点:strict 规则的效果高度依赖你是否在编辑器里“真正使用”了 TypeScript 的类型能力——光配对 tsconfig.json 不够,变量、参数、返回值都得有显式注解或可推导路径,否则检查就无从谈起。


















