如何解决错误“类型永远不存在”?

时间:2017-04-28 00:43:28

标签: typescript

我正在尝试定义一个可能存在或可能不存在的函数,具体取决于传递给父函数的JSON。我不知道将要传递的函数的名称,我不知道它将获得什么样的参数。我只知道它将是一个参数数组,我将在我的函数上调用apply方法。

我已经创建了我的界面,我认为这应该有效,因为我已经在我的fnParams索引上放置了任何[]。但是,我一直收到此错误应用不存在类型

declare let window: any;

interface CallbackJSON {
    fnContext: string;
    fnName: string;
    fnParams: any[];
}

interface UpdateJSON {
  someKey: string;
  anotherKey: string;
  oneMoreKey: string;
  callBackFn: CallbackJSON;  
}

export default function updateFunc(e: JQueryEventObject){
  const json: UpdateJSON = $(e.target).data('json');  
  const {someKey, anotherKey, oneMoreKey, callBackFn} = json;
  let fnContext, fnName, fnParams, _callBackFn: false | any[] = false;

  //Setup callback function if it's valid
  if(typeof callBackFn === 'object') {
    fnContext = callBackFn.fnContext
    fnName = callBackFn.fnName
    fnParams = callBackFn.fnParams
    _callBackFn = (fnName ? (fnContext ? window[fnContext][fnName] : window[fnName]) : false);
  }

  /* run some code */

  /* Then run callback function if it is a function */
  const runCallbackFn = function runCallbackFn() {
    if(typeof _callBackFn === 'function') {
      // APPLY DOES NOT EXIST ON TYPE NEVER
      _callBackFn.apply(null, fnParams);
    }
  }();
}

1 个答案:

答案 0 :(得分:1)

您将_callBackFn的类型声明为false | any[],因此无法调用。

尝试将其更新为_callBackFn: false | any[] | Function = false