Typescript-React-Umijs3中useDispatch的then报错问题

234次阅读

共计 836 个字符,预计需要花费 3 分钟才能阅读完成。

新项目开始使用 umijs3.0 后,其目前只有 typescript 版本,所以也全面尝试使用 typescirpt。
ts 确实优势明显,变量类型清晰、优化提示、易维护,看 API 之类也清楚,就是项目需要写的的东西比以前翻了一倍,也难怪 node 内部放弃 ts。
回归问题如下图:

使用 useDisptach 的 then 会报错,虽然使用 // @ts-ignore 可以屏蔽问题,但是心里面总是毛毛的,一定要解决这个问题才可以:

TS2339: Property 'then' does not exist on type '{type: string; payload: any;}'.

网上找了半天都是抄来抄去,只有 dispatch(action), 没有说 dispatch 的异步处理 then 问题。唯一一篇在 stackoverflow 上的文章:
https://stackoverflow.com/questions/59800913/type-safe-usedispatch-with-redux-thunk
也没有解决这个问题。
在官方文档的 @umijs/plugin-dva 处也没有关于 dispatch 的异步处理。
后面看了半天 umijs、react-redux、redux 的关于 useDispatch 说明,最后在 umijs 中找到其对 Dispatch 的定义。

export interface Dispatch<A extends Action = AnyAction> {<T extends A>(action: T): Promise<any> | T;
}

因此尝试了一下对 dispatch 声明类型为 umijs 的 Dispatch 类型:

import {Dispatch} from 'umi';

const dispatch: Dispatch = useDispatch();

就此解决该问题。如图:

虽然结果很简单的解决了,但是解决问题的过程中碰壁不少,也在 umijs 的 github 提了该问题但是没有任何人答复。不知道使用的人是不是都不用 dispatch 的异步处理。

正文完
 0