【问题标题】:Nested arrow function typescript syntax嵌套箭头函数打字稿语法
【发布时间】:2020-08-25 14:20:12
【问题描述】:
export const asyncAction = (data: {
  param: string
}): AppThunk => async (dispatch) => {
  try {
    const apidata = await api({ param });
  } catch (err) {
    console.log(err);
  }
};

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

【问题讨论】:

  • parma 不是param
  • @crashmstr 打错了
  • 您没有从data 中解构(或以其他方式提取)param,您必须这样做,例如await api({ param: data.param }).
  • @jonrsharpe 是的,我明白了。谢谢

标签: typescript redux-thunk


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您的外部作用域方法有一个名为 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);
        }
    };
    

    【讨论】:

      【解决方案3】:

      在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);
        }
      };
      

      【讨论】:

        猜你喜欢
        • 2017-01-04
        • 2015-12-12
        • 2018-11-18
        • 1970-01-01
        • 2019-08-03
        • 2016-08-26
        • 2020-11-30
        • 2018-09-30
        • 1970-01-01
        相关资源
        最近更新 更多