打字稿:函数参数::'caller','callee'和'arguments'属性在严格模式下可能无法访问

时间:2019-04-29 11:43:23

标签: typescript recursion parameter-passing

我正在尝试创建一个通用的递归函数,以接收带有参数作为参数的函数。

我已经创建了一个函数recursiveExec,该函数将要执行的API函数作为参数。这个API函数有2个参数。

在递归函数中,我需要更改这两个参数之一的值,然后再次重新运行相同的API函数。

但是,当尝试访问递归函数中的API函数参数时,打字稿会引发错误。

node:13724) UnhandledPromiseRejectionWarning: TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them

此外,我不知道如何将参数的新值发送到要执行的函数...

下面的代码对此帖子进行了简化。我已经删除了递归部分,只是替换为同一功能的第二次调用

很多东西!

具有2个参数的API函数

const apiFunc= async (
  param1: string,
  param2?: string | undefined
): Promise<ApiResult> => {    
    const resu = await apicall({
      param1,
      param2

    });
    return resu
};

通用递归函数

const recursiveExec= async (funcExecute: () => any): Promise<any> => {
  let d: any[] = [];
  console.log(funcExecute.arguments) <-----error is here
  const resu = await funcExecute();
  d = [...d, ...resu.data];

  // HERE IF THE PARAMETER parameter 2 IS NOT NULL I NEED TO 
  // REEXECUTE THE funcExecute function 
  if (resu.parameter2 && resu.parameter2!== "") {

    // how to pass the new value of parameter2 and then executing function ?
    const resu2 = await funcExecute();
    d = [...d, ...resu2.data]
    }

 return d;
};

执行死刑的电话

const li = await recursiveExec(() =>apiFunc("a", "b"));

tsconfig.json

{
  "compilerOptions": {
    "module": "commonjs",
    "resolveJsonModule": true,
    "esModuleInterop": true,
    "outDir": "dist",
    "target": "es6",
    "strict": true,
    "lib": ["esnext"],
    "noImplicitAny": false
  },
  "include": ["src/**/*"]
}

0 个答案:

没有答案