reactjs - 确定派发返回值的类型

我在 redux 中编写功能组件,并为特定操作添加了返回值。
新值来自 Promise,所以如果类型被称为 Ival返回值的类型为 Promise<Ival | null> (如果响应失败则为 null)。
我的问题是如何确定 Ival 的返回类型?

这是 Action :

export const addVal = (data: IData) => async (dispatch: IDispatch): Promise<IVal | null> => {
  try {
    const resp = await api.vals.create(data);
    dispatch({ type: "CREATE_VAL", payload: resp });
    return resp;
  } catch (error) {
    dispatch({ type: "ERROR_MSG" ,payload: error });
    return null;
  }
};

这是我正在使用的函数:

const createNewConnection = async (data: IData): Promise<void> => {

  try {
    const newVal: IVal | null = await dispatch(addVal(data));
    onValCreated(newVal);
  } catch (e) {
    onValCreated(null);
  }
};

onValCreated函数接收 IVal输入参数,这是错误信息:

"TS2559: Type '(dispatch: IDispatch) => Promise ' has no properties in common with type 'IVal'"

我都试过 dispatch 了:

// First try
const newVal: IVal | null = await dispatch<IVal | null>(addVal(data));

// Second try
const newVal: IVal | null = await dispatch<Promise<IVal | null>>(addVal(data));

但是没用

最佳答案

await关键字基本上是在 JS 中“解压”Promise,等待 Promise<number> , 会给你一个 number , 意味着你已经有了正确的方法。但是从它的样子来看,你试图在错误的地方应用这个规则。您不必在调用 时等待,但在处理函数的返回 值时(意味着:将参数传递给onValCreated 而不是dispatch 时) ).但是,错误消息为您提供了调度功能,因为这是您从中获取“错误类型”的地方。

修复很少,只需做这样的事情并用“嵌套”等待“解压”Promise:

const newVal: IVal | null = await dispatch(await addVal(data));

https://stackoverflow.com/questions/63267496/

相关文章:

postgresql - Postgres JSONB 检索非常慢

python-3.x - XGboost 目标 : Is there a way to do Mul

python - Pandas 在 Linux 中失败,在 Windows 中没有发生 - 缺少数据

css - Angular ngx-bootstrap - 如何制作一个又大又宽的模态

c# - 解析值行 1,位置 1 时遇到意外字符

docker - SMTP 未配置,请检查您的 grafana.ini 配置文件的 [smtp] 部

postgresql - 使用 Aurora postgres serverless 在 AWS R

php - 文件上传按钮在翻转卡上不起作用

reactjs - 我需要将浏览器路由器一分为二

java - 数组是复合数据类型,但是如何呢?