TypeScript中boolean | undefined联合类型的判断逻辑简化方法
简化实现方案
首先明确原四分支判断的核心规则:遇到undefined值直接跳过该条件,仅对有效的true/false布尔值执行与运算,当两个值全为undefined时返回true。
双变量极简实现
直接利用空值合并运算符??,给每个undefined的条件补全与运算的单位元true(任意值与true做与运算结果等于自身,完全匹配“跳过无效值”的规则),代码仅需一行:
return (condition1 ?? true) && (condition2 ?? true);
逻辑等价性核对(和原四分支完全对应)
- 两个值均为有效布尔值:直接执行
condition1 && condition2,和第一分支逻辑一致 - 仅
condition1有效:相当于condition1 && true,结果等于condition1,和第二分支逻辑一致 - 仅
condition2有效:相当于true && condition2,结果等于condition2,和第三分支逻辑一致 - 两个值均为
undefined:相当于true && true,结果为true,和第四分支逻辑一致
注意:此处绝对不能将
??替换为逻辑或运算符||。举例:当condition1为有效布尔值false、condition2为undefined时,错误写法(condition1 || true) && (condition2 || true)会把有效false误判为需要跳过的值,最终返回true,和预期的false结果完全不符。
可扩展通用实现
如果后续可能新增更多同类型的可选布尔条件,推荐使用数组过滤+归约的写法,新增条件时无需修改核心判断逻辑:
return [condition1, condition2 /* 新增条件直接追加到数组即可 */] // 类型守卫过滤所有undefined值,保留有效布尔值,同时给TS传递正确的类型信息 .filter((item): item is boolean => item !== undefined) // 以与运算单位元true为初始值,对所有有效布尔值做与运算,匹配全无效时返回true的规则 .reduce((prev, curr) => prev && curr, true);
该写法同样和原四分支逻辑完全等价,且天然适配任意数量的可选布尔条件,不会随着条件增多出现分支爆炸的问题。
内容的提问来源于stack exchange,提问作者wtf512
相关产品推荐
相关产品推荐

