TypeScript中空类参数为什么可以传入布尔值不触发编译错误?
问题原因
这个现象是TypeScript默认宽松的编译配置导致的,核心触发条件是未开启strictNullChecks编译选项:
- 先看类型推导逻辑:你声明的
isLeader是值为false的常量,因此isLeader && new GroupLeader()表达式的求值结果固定为false,TypeScript会直接推导出groupLeader的类型是false字面量类型。 - 在
strictNullChecks关闭的状态下(这是TypeScript的默认配置),所有falsy值(包括false、0、空字符串、null、undefined)都被允许赋值给任意非原始类型,因此类型为false的groupLeader可以传入要求GroupLeader类型的foo函数,不会触发类型报错。
修复方案
在tsconfig.json中开启如下配置即可触发正常的类型校验:
{ "compilerOptions": { "strictNullChecks": true } }
如果直接开启全量严格模式"strict": true,也会自动启用strictNullChecks,此时编译器会直接抛出错误,提示你不能将false类型的值分配给GroupLeader类型的参数。
内容的提问来源于stack exchange,提问作者oz10
相关产品推荐
相关产品推荐

