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

TypeScript枚举能否作为类型?React状态使用报错排查

问题原因及解决方案

问题根源

你遇到的错误是TypeScript类型推断机制导致的:当用useState(FetchState.NULL)初始化状态时,TypeScript会自动将状态类型推断为单一枚举成员类型FetchState.NULL,但你手动声明的状态类型是整个FetchState枚举,同时setState的类型写为React.Dispatch<FetchState>,这和useState实际推导的SetStateAction<FetchState.NULL>不兼容,因此IDE抛出类型不匹配错误。

而你之前单独使用枚举作为变量类型(比如let a: Test = Test.A)没问题,是因为直接给变量指定了完整的枚举类型,不存在自动推断的冲突。

解决方法

方法1:给useState显式指定泛型(推荐)

直接告诉TypeScript状态的类型是整个FetchState枚举,避免自动推断为单一成员,同时无需手动声明元组类型,TypeScript会自动推导setState的正确类型:

const [state, setState] = useState<FetchState>(FetchState.NULL);

方法2:修正手动声明的元组类型

如果一定要手动声明状态和setState的类型,需要把setState的类型改为React.Dispatch<React.SetStateAction<FetchState>>,确保与泛型类型匹配:

const [state, setState]: [FetchState, React.Dispatch<React.SetStateAction<FetchState>>] = useState(FetchState.NULL);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 11:42:03