2015-07-04 5 views
10

मेरा कोई ऐसा फ़ंक्शन है जो किसी दिए गए कन्स्ट्रक्टर के साथ किसी ऑब्जेक्ट को तत्काल करता है, किसी भी तर्क के साथ गुज़रता है।टाइपस्क्रिप्ट: किसी अभिव्यक्ति के साथ 'नया' का उपयोग नहीं कर सकता जिसका किस प्रकार कॉल की कमी है या हस्ताक्षर

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

यह इस तरह प्रयोग किया जाता है:

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

var thing = instantiate(Thing); 

यह काम करता है, लेकिन संकलक, प्रत्येक new ctor उदाहरण के बारे में शिकायत Cannot use 'new' with an expression whose type lacks a call or construct signature. कह। ctor किस प्रकार का होना चाहिए?

उत्तर

16

मैं इसे इस तरह से लिखना चाहते हैं (एक बोनस के रूप जेनरिक के साथ):

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

मैंने कभी भी उस जादुई वाक्यविन्यास की खोज नहीं की होगी! – alekop

+2

मुझे भी। क्या आप एक संकेत दे सकते हैं जहां कोई कुछ दस्तावेज़ ढूंढ सकता है। –

0

मैं भी यह त्रुटि आई जब मेरे प्रकार एक मॉड्यूल में लपेटा गया था, और मैं के बजाय मॉड्यूल पर नए बुला रहा था प्ररूप। यह क्यू & ए ने मुझे कुछ चीजों को रद्द करने में मदद की, और फिर मुझे यह अहसास हुआ कि प्रोग्रामिंग के लंबे दिन के बाद यह काफी मूर्खतापूर्ण था।

संबंधित मुद्दे

 संबंधित मुद्दे