2012-12-16 19 views
34

संभव डुप्लिकेट:
How does prototype extend on typescript?विस्तार कार्यक्षमता

मैं वर्तमान में टाइपप्रति सीख रहा हूँ, और पता है कि कैसे यह मौजूदा वस्तुओं में कार्यक्षमता जोड़ने के लिए संभव है करना चाहते हैं। मान लें कि मैं स्ट्रिंग ऑब्जेक्ट में फू के लिए कार्यान्वयन जोड़ना चाहता हूं। समझना कि टाइपप्रति कक्षाएं, इंटरफेस और मॉड्यूल मुझे निम्नलिखित की कोशिश करने के लिए नेतृत्व

1. संदर्भ जावास्क्रिप्ट कार्यान्वयन टाइपप्रति से

String.prototype.Foo = function() { 
    // DO THIS... 
} 

खुला समाप्त हो जाता है, सफलता के बिना: जावास्क्रिप्ट में मैं यह कर होगा

JavaScript: 

    String.prototype.Foo = function() { 
     // DO THIS... 
    } 

    TypeScript: 

    var x = "Hello World"; 
    x.Foo(); //ERROR, Method does not exist 

2. इंटरफ़ेस

बढ़ाएँ 0
interface String { 
    Foo(): number; 
} 

var x = "Hello World"; 
x.Foo(); //Exists but no implementation. 

3. वर्ग

class String { 
    Foo(): number { 
     return 0; 
    } 
} 

// ERROR: Duplicate identifier 'String' 

आप इन परिणामों से देख सकते हैं, अब तक मैं एक अंतरफलक अनुबंध के माध्यम से विधि जोड़ने के लिए सक्षम किया गया है, लेकिन कोई कार्यान्वयन का विस्तार है, तो, कैसे करना है मैं पूर्व-मौजूदा स्ट्रिंग क्लास के हिस्से के रूप में अपनी फू विधि को परिभाषित और कार्यान्वित करने के बारे में जाता हूं?

उत्तर

48

मुझे समाधान मिला है। यह इंटरफ़ेस और जावास्क्रिप्ट कार्यान्वयन का संयोजन लेता है। इंटरफेस टाइपस्क्रिप्ट के लिए अनुबंध प्रदान करता है, जिससे नई विधि की दृश्यता मिलती है। जावास्क्रिप्ट कार्यान्वयन कोड प्रदान करता है जिसे विधि कहा जाता है जब निष्पादित किया जाएगा।

उदाहरण:

interface String { 
    foo(): number; 
} 

String.prototype.foo= function() { 
    return 0; 
} 

टाइपप्रति 1.4 के रूप में आप अब भी स्थिर सदस्यों का विस्तार कर सकते हैं:

interface StringConstructor { 
    bar(msg: string): void; 
} 

String.bar = function(msg: string) { 
    console.log("Example of static extension: " + msg); 
} 
+2

वास्तव में, कि कैसे यह करने के लिए है है। याद रखें, टाइपस्क्रिप्ट स्वयं में एक भाषा नहीं है, यह सिर्फ एक वाक्य रचनात्मक चीनी है। तो 'जावास्क्रिप्ट शैली' में कुछ लिखना एक अच्छा अभ्यास है जिसमें कोई भी कमी नहीं होती है। –

+1

क्या यह समाधान वास्तव में ** स्ट्रिंग ** के साथ काम करता है? क्योंकि मैं _exact_ वही चीज़ कर रहा हूं और संकलन त्रुटियों को प्राप्त करता हूं कि संपत्ति स्ट्रिंग प्रकार पर मौजूद नहीं है। मैं क्या खो रहा हूँ? (टीएससी 1.4.1 का उपयोग करके) – sebas2day

+0

@ sebas2day हाँ यह काम करता है - http://tinyurl.com/ouwh3ln – series0ne

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