TypeScript: Kan ikke bruke 'new' med et uttrykk hvis type mangler en kall- eller konstruktorsignatur
Jeg har en funksjon som oppretter et objekt med en gitt konstruktør, og sender med eventuelle argumenter.
function instantiate(ctor:Function):any {
switch (arguments.length) {
case 1:
return new ctor();
case 2:
return new ctor(arguments[1]);
case 3:
return new ctor(arguments[1], arguments[2]);
...
default:
throw new Error('"instantiate" called with too many arguments.');
}
}
Det brukes slik:
export class Thing {
constructor() { ... }
}
var thing = instantiate(Thing);
Dette fungerer, men kompilatoren klager på hver new ctor-instans og sier Cannot use 'new' with an expression whose type lacks a call or construct signature.. Hvilken type bør ctor ha?
Svar #1
Jeg ville skrevet det på denne måten (med generics som en bonus):
function instantiate<T>(ctor: { new(...args: any[]): T }): T {
