You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 19:50:47