2015-07-04 8 views
10

Mam funkcję, która tworzy instancję obiektu z danym konstruktorem, przekazując dowolne argumenty.TypeScript: Nie można użyć "new" z wyrażeniem, którego typ nie ma wywołania lub konstruktu podpisu

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.'); 
    } 
} 

Jest on stosowany tak:

export class Thing { 
    constructor() { ... } 
} 

var thing = instantiate(Thing); 

To działa, ale kompilator narzeka każdej instancji new ctor mówiąc Cannot use 'new' with an expression whose type lacks a call or construct signature.. Jaki typ powinien mieć ctor?

Odpowiedz

16

że piszę to w ten sposób (z rodzajowych jako bonus):

function instantiate<T>(ctor: { new(...args: any[]): T }): T { 
+0

Nigdy nie odkryłbym tej magicznej składni na własną rękę! – alekop

+2

również ja. Czy możesz dać wskazówkę, gdzie ktoś może znaleźć jakieś dokumenty na temat. –

0

ja też mam ten błąd, gdy mój typ był owinięty w module, a ja nazywając nowy na module zamiast Typ. To Q & A pomogło mi wykluczyć pewne rzeczy, a potem doszedłem do wniosku, że było to po prostu głupie po długim dniu programowania.

Powiązane problemy