为什么TypeScript允许检查undefined?恒真条件为何无报错?
为什么TypeScript没对恒真条件报错?
首先明确:TypeScript默认不会主动检测永远为真或永远为假的条件判断,这类检查属于代码冗余检测范畴,不在TypeScript默认的核心类型校验逻辑里。
你的代码里,boolOrNull的类型是boolean | null,确实不可能等于undefined,所以boolOrNull !== undefined这个条件永远成立,但TypeScript默认不会为此抛出错误——因为它的核心目标是保障类型安全,而非代码质量层面的冗余检查。
如果想要让TypeScript识别这种情况并报错,你需要启用noUnusedCondition编译器选项,同时确保strictNullChecks处于开启状态(它是strict模式的一部分,默认在strict模式下已启用)。
在tsconfig.json里配置:
{ "compilerOptions": { "strict": true, // 包含strictNullChecks等严格类型检查 "noUnusedCondition": true } }
启用后,TypeScript就会提示你这个条件总是为true,属于无效判断。
另外补充:TypeScript把类型安全校验和代码质量检查做了明确区分,核心类型检查确保你不会执行类型不兼容的操作,而冗余代码、未使用变量这类问题,需要通过专门的编译器选项或ESLint这类工具来检测。
内容的提问来源于stack exchange,提问作者drivenuts
相关产品推荐
相关产品推荐

