【发布时间】:2019-09-01 01:05:59
【问题描述】:
我有一个不同类型的对象实例数组。
var instances: any = [];
instances["Object1"] = new TypeA();
instances["ObjectB"] = new TypeB();
每种类型都有自己的方法,具有不同的名称和参数数量。 我想通过调用一个函数并将数据传递给它来调用此方法,以识别要调用的方法和必要的参数值(我从客户端发送此数据)。
function CallMethod(data){
let args = data.args;// it's array
instances[data.objectId][data.methodId](??????);
}
是否可以自动分解args 数组以将其值作为不同的函数参数传递?
像这样:
instances[data.objectId][data.methodId](args[0], args[1], ... args[n]);
【问题讨论】:
-
我想提供一个类型安全的版本......但我想既然它很快就关闭了,我再也不能了:(
-
class TypeA { method(s: string) { } } class TypeB { foo(s: string, n: number) { } bar(n: number) { } } var instances = { "Object1": new TypeA(), "ObjectB": new TypeB(), } function CallMethod< K extends keyof typeof instances, M extends keyof typeof instances[K]>(data: { objectId: K } & { methodId: M } & { args: typeof instances[K][M] extends (...a: any) => any ? Parameters<typeof instances[K][M]> : never }) { let args = data.args; (instances[data.objectId][data.methodId] as any)(...args); } -
听起来不错,但您能解释一下您的解决方案吗?尤其是这一行:
{ args: typeof instances[K][M] extends (...a: any) => any ? Parameters<typeof instances[K][M]> : never }
标签: javascript typescript