嵌套箭头函数打字稿语法

Nested arrow function typescript syntax

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

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

如果你想解构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);
  }
  // ...
};

您的 outerscope 方法有一个名为 data 的参数,参数为 属性。在您的内部范围方法中,您试图在没有 data.param

的情况下访问参数

如果应该是:

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

api({ param }); 中,您正在尝试访问存储在 data 中的 param。你需要先从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);
  }
};