我正在尝试定义一个可能存在或可能不存在的函数,具体取决于传递给父函数的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);
}
}();
}
答案 0 :(得分:1)
您将_callBackFn
的类型声明为false | any[]
,因此无法调用。
尝试将其更新为_callBackFn: false | any[] | Function = false
。