将数组分解为TypeScript\JavaScript中的函数参数
我有一个不同类型的对象实例数组将数组分解为TypeScript\JavaScript中的函数参数,javascript,typescript,Javascript,Typescript,我有一个不同类型的对象实例数组 var instances: any = []; instances["Object1"] = new TypeA(); instances["ObjectB"] = new TypeB(); 每种类型都有自己的方法,具有不同的名称和参数数量。 我想通过调用一个函数并向其传递数据来调用此方法,以标识要调用的方法和必要的参数值(我从客户机发送此数据) 是否可以自动分解args数组以将其值作为不同的函数参数传递 像这样: instances[data.objectI
var instances: any = [];
instances["Object1"] = new TypeA();
instances["ObjectB"] = new TypeB();
每种类型都有自己的方法,具有不同的名称和参数数量。
我想通过调用一个函数并向其传递数据来调用此方法,以标识要调用的方法和必要的参数值(我从客户机发送此数据)
是否可以自动分解args
数组以将其值作为不同的函数参数传递
像这样:
instances[data.objectId][data.methodId](args[0], args[1], ... args[n]);
使用
使用
您可以使用
…
销毁函数参数数组,它也称为扩展。你可以阅读更多关于它的内容
因此,您的功能将是:
function CallMethod(data){
let args = data.args;// it's array
instances[data.objectId][data.methodId](...args);
}
您可以使用
…
销毁函数参数数组,它也称为扩展。你可以阅读更多关于它的内容
因此,您的功能将是:
function CallMethod(data){
let args = data.args;// it's array
instances[data.objectId][data.methodId](...args);
}
播报员在这里工作
function CallMethod(data){
let args = data.args;
instances[data.objectId][data.methodId](...args);
}
播报员在这里工作
function CallMethod(data){
let args = data.args;
instances[data.objectId][data.methodId](...args);
}
要么使用扩展运算符,要么使用
.call
或.apply
,我想提供此的类型安全版本。。。但是我想,因为它很快就被关闭了,我再也不能:(classtypea{method(s:string){}}classtypeb{foo(s:string,n:number){}bar(n:number){}var实例={“Object1”:new TypeA(),“ObjectB”:new TypeB(),}函数CallMethod(数据:{objectId:K}&{methodId:M}&{args:typeof instances[K][M]扩展(…a:any)=>any?参数:never}{let args=data.args;(instances[data.objectId][data.methodId]as any)(…args);}
听起来不错,但你能解释你的解决方案吗?特别是这一行:{args:typeof instances[K][M]扩展(…a:any=>any?Parameters:never}
或者使用spread操作符,或者使用.call
或者.apply
,我想提供一个类型安全的版本…但是我想因为它很快就被关闭了,我再也不能:(类TypeA{method(s:string){}类TypeB{foo(s:string,n:number){}bar(n:number){}var instances={“Object1”:new TypeA(),“ObjectB”:new TypeB(),}函数CallMethod(数据:{objectId:K}&{methodId:M}&{args:typeof instances[K][M]extensed(…a:any any=>any参数:never}){let args=data.args;(instances)[data.objectId][data.methodId]as any)(…args);}
听起来不错,但是你能解释一下你的解决方案吗?特别是这一行:{args:typeof instances[K][M]extends(…a:any)=>any?参数:never}
有什么理由投反对票吗?有什么理由投反对票吗?
function CallMethod(data){
let args = data.args;
instances[data.objectId][data.methodId](...args);
}