2013-08-29 5 views
5

मैं Typecriptlang.org पर खेल के मैदान में एक बल्कि विकसित उदाहरण का परीक्षण करने का प्रयास कर रहा हूं। मेरा इनवेबल इंटरफ़ेस एक स्ट्रिंग कन्स्ट्रक्टर तर्क निर्दिष्ट करता है। मेरी फैक्ट्री विधि के शरीर में मैं इस बाधा का सम्मान नहीं कर रहा हूं (या तो एक संख्या का उपयोग करके या शून्य तर्क सूची के साथ कॉल करके)। मुझे गड़बड़ी या चेतावनी में कोई त्रुटि नहीं मिल रही है।टाइपस्क्रिप्ट: नया() इंटरफ़ेस अनुबंध लागू नहीं किया गया

क्या मैंने कुछ गलत किया है या यह एक बग है?

interface INewable<T> { 

    new(param: string): T; 
} 

interface IToStringable { 

    toString(): string; 
} 

module Factory { 

    export function createInstance<T extends IToStringable>(ctor: INewable<T>): T { 

     return new ctor(1024); //why doesn't this fail? 
    } 
} 

var d = Factory.createInstance(Function); 

alert(d.toString()); 

संपादित करें: सरल रूप:

function createInstance<T>(ctor:new(s:string)=>T):T { 
    return new ctor(42); //why doesn't this fail either 
} 

दर्शाती ही बग।

उत्तर

2

अच्छा पकड़ो। यह कंपाइलर में एक बग है। सरल नमूना:

interface INewable<T> { 
    new(param: string): T; 
} 

function createInstance<T>(ctor: INewable<T>): T { 
    return new ctor(1024); //why doesn't this fail? 
} 

असल में मैं अपनी लगता है क्योंकि T एक सामान्य आइटम के भीतर प्रकार any की है। यह संकलक और इसके कुछ हिस्सों को भ्रमित कर रहा है (पूरी तरह से नहीं) ctor भी any है।

उदा। अनुसरण करने में त्रुटि नहीं है:

interface INewable<T> { 
    new(param: string,anotherparam): T; 
} 

function createInstance<T>(ctor: INewable<T>): T { 
    return new ctor(1024); //why doesn't this fail? 
} 

लेकिन निम्नलिखित है:

interface INewable<T> { 
    anything(): T; 
} 

function createInstance<T>(ctor: INewable<T>): T { 
    return new ctor(1024); //fails 
} 

आप इसे यहाँ रिपोर्ट कर सकते हैं: https://typescript.codeplex.com/workitem/list/basic, और यदि आप मुझे एक लिंक की सराहना करेंगे कर तो मैं पर मतदान कर सकते बग

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