React TypeScript createCtx函数类型不匹配问题咨询
为什么
() => defaultValue无法匹配Dispatch<SetStateAction<T>>类型? 先把React类型声明里的核心定义摆出来,一目了然:
type SetStateAction<T> = T | ((prevState: T) => T):useState的更新器接受的参数,可以是状态值本身,也可以是基于旧状态计算新值的函数type Dispatch<A> = (value: A) => void:更新器函数的类型,要求必须接受一个A类型的参数,且返回值为void
你说的UpdateType本质就是Dispatch<SetStateAction<T>>,而() => defaultValue这个箭头函数的类型是() => T,和目标类型不匹配的原因有两个:
- 参数列表不匹配:Dispatch类型强制要求函数必须接收一个
SetStateAction<T>类型的参数——哪怕你实际逻辑里用不到这个参数,TypeScript也会严格检查参数的数量和类型是否符合定义。你的箭头函数没有定义任何参数,自然过不了检查。 - 返回值类型不匹配:Dispatch类型要求函数返回
void(也就是不能有有效返回值),但你的箭头函数返回了T类型的defaultValue,这和类型定义的要求冲突。
如果要写一个符合类型要求的默认更新器,最简单的无操作实现是:
const defaultUpdate: Dispatch<SetStateAction<T>> = () => {};
如果需要保持当前状态不变(模拟无意义的更新),可以写成:
const defaultUpdate: Dispatch<SetStateAction<T>> = (action) => { typeof action === 'function' && action(defaultValue); };
不过通常前者就足够作为默认值使用了。
内容的提问来源于stack exchange,提问作者Alan Omar
相关产品推荐
相关产品推荐

