TypeScript枚举OR判断报错:类型无重叠条件始终返回true如何解决
报错原因
你写的逻辑用了||(或运算符),而单个segment枚举值不可能同时等于Segment.Y和Segment.C两个不同的枚举项:
- 如果当前值是
Segment.Y,那么this.program.segment !== Segment.C条件成立,整个||运算结果为true - 如果当前值是
Segment.C,那么this.program.segment !== Segment.Y条件成立,整个||运算结果为true - 如果当前值是其余三个枚举项,两个不等于的判断同时成立,运算结果还是true
因此这个条件永远返回true,完全阻断了后续逻辑的执行,TypeScript识别到两个枚举值类型无重叠,才会抛出对应的类型错误。
解决方案
有两种常用的写法可以实现你要的逻辑:
- 替换逻辑运算符为
&&(且运算符)
只有当值既不是Y也不是C的时候,才触发返回,完全匹配你的需求:
if (this.program.segment !== Segment.Y && this.program.segment !== Segment.C) return text
- 使用数组
includes方法(可读性更高,更易扩展)
把需要放行的枚举值统一放到数组中,判断当前值不在放行列表中时返回text,后续要新增放行枚举值只要修改数组即可:
if (![Segment.Y, Segment.C].includes(this.program.segment)) return text
内容的提问来源于stack exchange,提问作者nm12
相关产品推荐
相关产品推荐

