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

Svelte 5中使用TypeScript枚举出现ts(2367)错误的原因?

问题:Svelte 5中TypeScript枚举比较报错原因

我无法在Svelte 5 REPL中复现以下问题,因为该REPL无法识别同一文件内的enum类型:

<script lang="ts">
    enum Pro {
        ZERO,
        ONE,
        TWO
    }

    let pros: Pro = $state(Pro.ZERO);

    const again: boolean = $derived(pros == Pro.ONE || pros == Pro.TWO);
</script>

我遇到了TypeScript错误:

This comparison appears to be unintentional because the types Pro.IDLE and Pro.ONE have no overlap. ts(2367)

请问出现该错误的原因是什么?


错误原因分析

  1. 枚举定义存在冲突或不一致:错误提示里提到了Pro.IDLE,但你提供的代码中枚举并没有这个成员。这说明实际运行环境中,你的Pro枚举可能被其他代码修改、覆盖,或者存在同名的其他类型/枚举,导致TypeScript识别的枚举成员和你编写的不一致。

  2. Svelte 5状态包装的类型推断偏差:$state是Svelte 5的新状态API,可能存在TypeScript类型推断的bug,导致pros的类型被错误限定为仅包含Pro.IDLE的子类型,而非完整的Pro枚举类型,进而认为和Pro.ONE/Pro.TWO的比较没有意义。

  3. 本地环境配置问题:如果是在本地项目而非REPL中遇到该问题,可能是tsconfig.json的配置(比如strict模式、枚举相关编译选项)存在问题,或者Svelte的TypeScript预处理工具对枚举的处理异常,导致类型推断出错。

核心问题是TypeScript没有正确识别pros的完整Pro枚举类型,错误地将其判定为仅包含Pro.IDLE的类型,因此认为该比较是无意义的。


内容的提问来源于stack exchange,提问作者Fred Hors

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 05:08:13