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.IDLEandPro.ONEhave no overlap. ts(2367)
请问出现该错误的原因是什么?
错误原因分析
枚举定义存在冲突或不一致:错误提示里提到了
Pro.IDLE,但你提供的代码中枚举并没有这个成员。这说明实际运行环境中,你的Pro枚举可能被其他代码修改、覆盖,或者存在同名的其他类型/枚举,导致TypeScript识别的枚举成员和你编写的不一致。Svelte 5状态包装的类型推断偏差:
$state是Svelte 5的新状态API,可能存在TypeScript类型推断的bug,导致pros的类型被错误限定为仅包含Pro.IDLE的子类型,而非完整的Pro枚举类型,进而认为和Pro.ONE/Pro.TWO的比较没有意义。本地环境配置问题:如果是在本地项目而非REPL中遇到该问题,可能是
tsconfig.json的配置(比如strict模式、枚举相关编译选项)存在问题,或者Svelte的TypeScript预处理工具对枚举的处理异常,导致类型推断出错。
核心问题是TypeScript没有正确识别pros的完整Pro枚举类型,错误地将其判定为仅包含Pro.IDLE的类型,因此认为该比较是无意义的。
内容的提问来源于stack exchange,提问作者Fred Hors
相关产品推荐
相关产品推荐

