您可以在3.0中使用条件类型和
Tuples in rest parameters and spread expressions
type CtorArgumentTypes<T extends new (...args: any[]) => any> = T extends new (...args: infer A) => any ? A : []
function modifyClass<MOD_ME extends new (...args: any[]) => any>(
baseClass: MOD_ME,
...args: CtorArgumentTypes<MOD_ME>
): InstanceType<MOD_ME> {
return new baseClass(...args);
}
class Test {
constructor(public n: number, public s: string) {
}
}
let o = modifyClass(Test, 10, ""); //ok
let o2 = modifyClass(Test, "", ""); // error