2012-11-10 11 views
6

क्या डिफ़ॉल्ट इंटरफ़ेस ऑब्जेक्ट बनाने का कोई तरीका है?डिफ़ॉल्ट इंटरफ़ेस ऑब्जेक्ट

उदाहरण:

var myObj: myInterface = { 
    A: "", 
    B: "", 
    C: 0, 
    D: null 
} 

लेकिन यह अगर वहाँ इस तरह यह करने के लिए कुछ वाक्यात्मक चीनी था अच्छा होगा:

interface myInterface { 
    A: string; 
    B: string; 
    C: number; 
    D: CustomType; // A custom class 
} 

आमतौर पर आप द्वारा इस इंटरफेस की एक वस्तु बना सकते हैं:

var myObj = new myInterface; 
// OR 
var myObj = default(myInterface); 

अपना शोध से मैं यह करने के लिए एक रास्ता नहीं मिला है; लेकिन मुझे उम्मीद है कि मैंने अभी कुछ याद किया है।

उत्तर

2

कोई नहीं है।

एक इंटरफ़ेस-घोषणा केवल संकलन-समय पर मौजूद है, इसलिए ऐसा करने का एकमात्र समय संकलन करते समय होता है। दुर्भाग्य से, कंपाइलर ऐसा करने के लिए कोई भी भाषा निर्माण प्रदान नहीं करता है, न ही संकलन प्रक्रिया का विस्तार करने का कोई भी तरीका।


इस समस्या को हल करने का एक तरीका, कुछ कोड-पीढ़ी करना होगा; एक ऐसा फ़ंक्शन जोड़ें जो सही संरचना के साथ ऑब्जेक्ट बनाता है। इस दृष्टिकोण के साथ समस्या यह है कि आपको या तो टाइपस्क्रिप्ट कोड, या कुछ डोमेन विशिष्ट भाषा का विश्लेषण करना होगा।

कुछ इस तरह पढ़ें:

<Definitions> 
    <Interface Name="myInterface"> 
     <Member name="A" type="string"/> 
     <Member name="B" type="string"/> 
     <Member name="C" type="number"/> 
     <Member name="D" type="CustomType"/> 
    </Interface> 
</Definitions> 

और की तरह कुछ उत्पन्न:

interface myInterface { 
    A: string; 
    B: string; 
    C: number; 
    D: CustomType; 
} 

function InitMyInterface(obj?: any): myInterface { 
    if (obj === undefined) obj = {}; 
    return { 
     A: obj.A === undefined ? "" : obj.A, 
     B: obj.B === undefined ? "" : obj.B, 
     C: obj.C === undefined ? 0 : obj.C, 
     D: obj.D === undefined ? null : obj.D, // or InitCustomType(obj.D) 
    }; 
} 
+0

क्षमा मैंने सोचा था कि यह मामला = ( –

+0

हो सकता है यह संकलक के लिए एक अच्छा टुकड़ा होगा, हालांकि वे टाइपप्रति वाक्य रचना जोड़ने के लिए इस हालांकि ऐसा करने के लिए थे। उर्फ डिफ़ॉल्ट (myInterface) एक डिफ़ॉल्ट ऑब्जेक्ट घोषणा में संकलित करता है। –

14

आप एक अलग सिंटैक्स का उपयोग करें और सभी प्रकार की जाँच और IntelliSense मिल सकती है।

interface IUserModel{ 
    Name: string; 
    Age: number; 
    Email: string; 
    IsActive: boolean; 
} 

var user = <IUserModel>{}; 

आप एक खाली उपयोगकर्ता वस्तु बनाने लेकिन टाइपप्रति संकलक अभी भी जाँच कर रहा है आप वस्तु पर वैध गुण होते हैं और यह अभी भी कोड पूरा होने में प्रावधान है कि।

enter image description here

enter image description here

+0

यह समाधान है, धन्यवाद! –

+0

यह स्वीकार्य उत्तर होना चाहिए! –

0

@Matija पूरा करने के लिए आप भी एक पंक्ति में कर सकते हैं, और अपने आईडीई (उदाहरण के दृश्य स्टूडियो कोड के लिए) ऑटो आप के लिए इसे पूरा:

var user = <IUserModel>{ 
    Name : "foo"; 
}; 

यदि आप इंटरफ़ेस को पैरामीटर के रूप में सेट करना चाहते हैं तो यह मदद करेगा, इसलिए यह भी मान्य है (JQueryAjaxSettings एक इंटरफ़ेस है और jquery.d.ts का हिस्सा tsd install jquery द्वारा प्राप्त किया जा सकता है):

jQuery.ajax("foo/bar", 
    <JQueryAjaxSettings>{ 
     dataType:"json", 
     cache : true, 

    }); 
संबंधित मुद्दे