将数组分解为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); 
}