TypeScript枚举相等检查触发TS2367编译错误,求原因及排查
TypeScript枚举类型收窄导致的TS2367错误解答
错误原因
这不是操作错误,是TypeScript的类型收窄特性在起作用。当你执行let n: E = E.one时,TypeScript会根据赋值的具体值,自动把n的类型从宽泛的E枚举类型,收窄为更精确的E.one字面量类型。此时n的类型被固定为E.one,和E.two属于完全不重叠的枚举成员类型,编译器能明确判断第二个if条件永远为false,因此抛出TS2367错误。
解决办法
如果你希望n保持E类型(允许后续被重新赋值为其他枚举成员),可以用以下两种方式处理:
- 方式一:通过类型断言覆盖自动收窄的类型
let n: E = E.one as E; - 方式二:先声明类型再赋值,避免编译器即时收窄类型
let n: E; n = E.one;
两种方式都能让n的类型保持为E,此时两个if条件判断都能正常通过编译。
内容的提问来源于stack exchange,提问作者Siavoshkc
相关产品推荐
相关产品推荐

