嵌套箭头函数打字稿语法

时间:2020-08-25 14:20:12

标签: typescript redux-thunk

export const asyncAction = (data: {
  param: string
}): AppThunk => async (dispatch) => {
  try {
    const apidata = await api({ param });
  } catch (err) {
    console.log(err);
  }
};

我收到此错误“速记属性'param'的范围内不存在任何值。要么声明一个,要么提供一个初始化程序。”

3 个答案:

答案 0 :(得分:0)

如果要解构param属性,则必须将解构后的对象语法放在参数类型定义的左侧,如下所示:

export const asyncAction = ({
  param,
}: {
  param: string;
}): AppThunk => async (dispatch) => {
  // ...

但是在这种情况下,如果一个参数确实是仅具有param属性的对象,则解构无济于事,因为您稍后将创建具有param属性的对象以进行传递到api

export const asyncAction = (data: { param: string; }): AppThunk => async (dispatch) => {
  try {
    const apidata = await api(data);
  } catch (err) {
    console.log(err);
  }
  // ...
};

答案 1 :(得分:0)

您的externalscope方法具有一个名为data的参数,该参数具有param属性。在内部作用域方法中,您尝试不使用data.param

来访问param。

如果应为:

export const asyncAction = (data: {
    param: string
}): AppThunk => async (dispatch) => {
    try {
        const apidata = await api({ param: data.param });
    } catch (err) {
        console.log(err);
    }
};

答案 2 :(得分:0)

api({ param });中,您尝试访问存储在param中的data。您需要先从data“解压缩”它,例如:const param = data.param;,然后才能使用它。

export const asyncAction = (data: {
  param: string
}): AppThunk => async (dispatch) => {
  const param = data.param;
  try {
    const apidata = await api({ param });
  } catch (err) {
    console.log(err);
  }
};