确定分派返回值的类型

时间:2020-08-05 14:35:59

标签: reactjs typescript react-redux react-hooks dispatch

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

这是动作:

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:类型'(dispatch:IDispatch)=> Promise'与类型'IVal'没有共同的属性”

我尝试了同时发送:

// 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));

但这没用

2 个答案:

答案 0 :(得分:0)

await关键字基本上在JS中“解包”一个Promise,等待一个Promise<number>,将返回一个number,表示您已经有了正确的方法。但是从外观上看,您试图在错误的位置应用此规则。当您调用 时不必等待,而是在处理函数中的 returned 值时就意味着(意味着:将参数传递给onValCreated而不是{ {1}})。但是,错误消息为您提供了分派功能,因为这是从中获取“错误类型”的地方。

解决方法很少,只需执行以下操作,然后等待“嵌套”即可“解开” Promise:

dispatch

答案 1 :(得分:0)

该操作返回一个函数,该函数接收一个调度作为参数,然后返回我想要的值。所以我要做的是创建一个执行操作的const,然后通过分派执行此变量。最终它返回了我想要的类型的承诺!

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