strict为true是typescript严格模式总开关,等价于启用noimplicitany、strictnullchecks、strictfunctiontypes、strictbindcallapply和strictpropertyinitialization五项检查。

严格模式不是开关,是配置文件+语言服务器+项目结构三者对齐的结果。开不开、有没有效,不取决于插件装没装,而取决于 VSCode 正在读哪个配置、用哪个 TypeScript/Python 服务、打开的路径对不对。
tsconfig.json 里 strict 设为 true 却不报错?检查这三件事
VSCode 不会主动加载你硬盘上任意位置的 tsconfig.json,它只认当前工作区根目录下、且被 TypeScript 语言服务成功解析的那个。
- 确认 VSCode 打开的是包含
tsconfig.json的**项目最外层文件夹**(不是src/或packages/my-lib/子目录) - 右下角点击 TypeScript 版本号,必须显示类似
TS 5.4.2 (Workspace)—— 如果是Bundled或Node module,说明它根本没读你的配置 - 按
Ctrl+Shift+P→ 输入TypeScript: Select TypeScript Version→ 明确选Use Workspace Version,然后执行Developer: Reload Window -
tsconfig.json本身不能有语法错误(比如多逗号、单引号、注释),否则 TS 服务会静默跳过整个文件
Python 项目启用 Pyright 严格检查,光装插件没用
VSCode 官方 Python 插件默认用的是 Pylance,不是 Pyright。哪怕你装了 Pyright 插件,只要 python.languageServer 还设成 Pylance,pyrightconfig.json 或 pyproject.toml 里的 "typeCheckingMode": "strict" 就等于没写。
- 打开设置(
Ctrl+,),搜python.languageServer,把它从Pylance改成Pyright - 确保项目根目录有
pyrightconfig.json(内容为{"typeCheckingMode": "strict"})或pyproject.toml(字段必须是[tool.pyright]下的typeCheckingMode = "strict") - 如果两个配置文件同时存在,
pyrightconfig.json优先级更高 —— 别以为 toml 生效了,其实被 json 覆盖了 - 改完重启窗口,看右下角状态栏是否显示
Pyright;不显示就说明没切成功
strict 开启后满屏红波浪线,哪些该修、哪些可忽略?
严格模式不是为了让你删代码,而是暴露类型系统里“睁一只眼闭一只眼”的地方。以下三类基本就是硬伤,建议优先处理:
-
Parameter 'x' implicitly has an 'any' type:函数参数或返回值没写类型注解,得补上,比如function foo(x: string): number -
Object is possibly 'undefined':由strictNullChecks触发,别急着加!断言,先判断是否真可能为undefined,再决定用?.、??还是提前校验 -
Dict[str, Any]类型推导泛滥:比如data = {"x": 1},Pyright 默认推成Dict[str, Any],后续data["x"] + 1就报错 —— 得显式标注data: Dict[str, int] = {"x": 1}
真正容易被忽略的是:修改配置后,VSCode 不会自动重检已打开的文件。要么手动保存一次 tsconfig.json 或 pyrightconfig.json,要么执行 Developer: Restart TS Server(命令面板里搜这个),否则你看到的还是旧结果。











