React.js useReducer钩子调用报错:无匹配重载及dispatch参数异常
问题原因及修复
你的代码里存在两处关键的类型不匹配问题,导致TypeScript抛出错误:
1. 初始状态与State类型定义不匹配
你定义的CounterState类型指定了键为count:
type CounterState = { count: number; };
但实际初始化的状态对象用了counter作为键:
const initialState = { counter: 0 };
键名不一致直接导致TypeScript无法正确关联reducer的输入输出类型。
2. Reducer返回值类型矛盾
在reducer的reset分支中,你返回了initialState(键为counter的对象),但其他分支返回的是符合CounterState类型、键为count的对象。这种返回值类型的不一致,让TypeScript错误推断了useReducer的类型,将dispatch判定为不需要参数的DispatchWithoutAction,所以调用dispatch传参时会提示“Expected 0 arguments”。
快速修复
将initialState的键名改为count,与CounterState类型保持统一:
const initialState = { count: 0 };
修改后,reducer所有分支的返回值都会符合CounterState类型,TypeScript就能正确推断useReducer的类型,dispatch也可以正常接收CounterAction类型的参数了。
内容的提问来源于stack exchange,提问作者marc
相关产品推荐
相关产品推荐

