2015-07-04 14 views
10

Herhangi bir argümandan geçen belirli bir kurucuyla bir nesneyi başlatan bir işlevim var.TypeScript: 'new', türü bir aramaya sahip olmayan veya imzası olmayan bir ifade ile kullanılamıyor

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

var thing = instantiate(Thing); 

Bu çalışır, ancak derleyici Cannot use 'new' with an expression whose type lacks a call or construct signature. diyerek her new ctor örneği şikayetçi:

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

Böyle kullanılır. Ne tür ctor olmalıdır?

cevap

16

I (prim olarak jenerik ile birlikte) bu şekilde yazmak istiyorum:

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

Bu büyülü sözdizimini asla kendi başıma bulamazdım! – alekop

+2

bende. Birisi hakkında bazı dokümanlar bulabileceğiniz bir ipucu verebilir misiniz. –

0

Ben de benim tipim bir modül sarılı iken bu hatayı aldım ve modül üzerinde yeni çağıran ziyade edildi türü. Bu Q & A, bazı şeyleri göz ardı etmeme yardımcı oldu, ve sonra, aydınlanmaya geldim uzun bir programlama gününden sonra oldukça aptalca bir şeydi.

İlgili konular