TypeScript中string|undefined赋值给string未触发编译报错问题
问题原因
strictNullChecks未生效是以下几个问题共同导致的:
- 执行
tsc demo.ts时指定了具体文件路径,TypeScript会直接忽略同目录下的tsconfig.json,使用默认编译配置(默认关闭严格空检查),因此编译时不会抛出类型错误。 - 你提供的
tsconfig.json存在语法错误:"strict": true末尾多了一个多余的尾随逗号,标准JSON不支持对象最后一个属性后加逗号,会导致TS和WebStorm解析配置失败,自动回退到默认配置,你手动开启的严格检查规则全部不生效。 - WebStorm未正确关联项目的TypeScript配置,使用内置默认规则做代码检查,没有读取你本地的tsconfig.json。
解决方案
按顺序操作即可修复:
- 修正tsconfig.json语法,去掉多余的尾随逗号,修正后配置如下:
{ "compilerOptions": { "module": "commonjs", "target": "es5", "sourceMap": true, "strictNullChecks": true, "strict": true }, "exclude": [ "node_modules" ] }
- 编译时不要指定具体文件,直接在项目根目录执行
tsc命令,编译器会自动读取同目录的tsconfig.json,此时会正常抛出类型错误,提示string | undefined不能赋值给string类型的参数。 - 调整WebStorm配置:
- 打开设置面板,进入
Languages & Frameworks > TypeScript配置页 - 选择本地安装的TypeScript 4.7.4版本,不要使用WebStorm内置的捆绑版本
- 勾选
Use tsconfig.json选项,路径选择你项目根目录下的tsconfig.json - 保存设置后重启TypeScript服务,编辑器内就会正常显示类型报错。
- 打开设置面板,进入
内容的提问来源于stack exchange,提问作者Aaron Hao
相关产品推荐
相关产品推荐

