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

Jest中mock React useState出现类型不兼容错误求助

解决Jest Mock React useState的类型不兼容问题

这个错误是因为你的mock函数签名和React useState的官方类型定义不匹配导致的,以下是几种类型安全的解决方式:

方式一:泛型+明确Dispatch类型(推荐)

先导入React的类型定义,再给mock的setState指定正确类型,同时用泛型适配任意初始化值类型:

import React, { Dispatch, SetStateAction } from 'react';

// 定义符合React类型规范的mock setState函数
const mockSetState = jest.fn() as Dispatch<SetStateAction<any>>;

// 对useState进行Spy并实现mock
const useStateSpy = jest.spyOn(React, 'useState');
useStateSpy.mockImplementation(<T>(init: T) => [init, mockSetState]);

如果需要针对特定类型(比如字符串)做更严格的类型约束,可以这样写:

const mockSetState = jest.fn() as Dispatch<SetStateAction<string>>;
useStateSpy.mockImplementation((init: string) => [init, mockSetState]);

方式二:类型断言快速修复

如果不需要严格的类型检查,可以直接用类型断言让TS忽略类型不匹配:

const useStateSpy = jest.spyOn(React, 'useState');
useStateSpy.mockImplementation((init) => [init, jest.fn()] as [any, React.Dispatch<any>]);

核心原因说明

React的useState类型签名是function useState<S>(initialState: S | (() => S)): [S, Dispatch<SetStateAction<S>>],你的原代码没有匹配这个签名:

  • 没有正确定义setState的Dispatch类型
  • mock函数的返回值类型没有符合[状态值, 更新函数]的严格元组类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 18:40:56