import TriggerData, {Trigger} from "@/types/data"; interface FunctionUseFunction { (this:Vue, item:TriggerData, index:number): any } interface FunctionUseAsyncFunction { (this:Vue, item:TriggerData, index:number): Promise } type FunctionUseParams = string | FunctionUseFunction | FunctionUseAsyncFunction; export default class FunctionTrigger extends Trigger { constructor(private triggerFunction:FunctionUseParams){ super(); } trigger(item: TriggerData, index: number, target: Vue): void { if (typeof this.triggerFunction === 'string') { // @ts-ignore return target[this.triggerFunction](item,index); } // 执行 let params:any = this.triggerTarget(this.triggerFunction,item,index,target); // 如果为异步触发 if (params instanceof Promise) { params.then((useFunction:FunctionUseFunction)=> this.triggerTarget(useFunction,item,index,target)).catch((useFunction:FunctionUseFunction)=> this.triggerTarget(useFunction,item,index,target)) } } triggerTarget(trigger:FunctionUseFunction, item: TriggerData, index: number, target: Vue):any{ if (typeof trigger === 'function') { return trigger.call(target,item,index); } } }