2016-01-21 9 views
8

टाइपप्रति का उपयोग कर ...क्या आप इस विषम ES6 तीर फ़ंक्शन को टाइपस्क्रिप्ट के माध्यम से समझा सकते हैं?

public subscribe:(subscribeFunction:(state)=>void)=>()=>void; 

Am मैं यह सही समझ? यह एक सबस्क्राइब विधि है जो एक फ़ंक्शन के रूप में कार्य करती है, प्रकार का फ़ंक्शन, और वह फ़ंक्शन दिया जाता है, जिसे कॉल करते समय एक राज्य तर्क प्राप्त होता है, जो तर्क दिया गया फ़ंक्शन कुछ भी वापस नहीं करेगा (यानी शून्य) ... और मैं खो गया हूं अंतिम() =>() => शून्य

: /?

शॉन

+1

संयोग से अधिक स्पष्ट होना चाहिए, कोई भी कभी भ्रमित कोड लिखने की जानी चाहिए इस तरह। अगर इसे पढ़ना मुश्किल है, तो इसे तोड़ दो! 'टाइप करें VoidFunction = {(): शून्य; }; सदस्यता लें: {(सदस्यता लें: (राज्य) => शून्य): शून्य कार्य; } ', उदाहरण के लिए। –

उत्तर

8

यह एक सार्वजनिक संपत्ति subscribe बुलाया (subscribeFunction: (state) => void) =>() => void; का एक प्रकार है कि के लिए है:

// scope 
public 
// name 
subscribe: 
// type (function) 
    // parameters 
    (
     // parameter name 
     subscribeFunction: 
     // parameter type (function) 
     (state) => void 
    ) => 
    // return type (function) 
    () => void; 

यहाँ एक उदाहरण है कि संकलित है:

class MyClass { 
    public subscribe: (subscribeFunction: (state) => void) =>() => void; 
} 

let myInstance = new MyClass(); 

myInstance.subscribe = (subscribeFunction: (state) => void) => { 
    console.log("statements might go here"); 

    return() => { 
     subscribeFunction(1 /* state */); 
     console.log("nothing returned by this inner function"); 
    }; 
}; 

// Example use 

// outputs "statements might go here" 
let innerFunction = myInstance.subscribe((state) => console.log(state)); 
// outputs 1 and "nothing returned by this inner function" 
innerFunction(); 
+0

मैंने हमेशा सोचा था कि आप ऐसा करते हैं: फ़ंक्शन के लिए शून्य जो कुछ भी वापस नहीं करता है, मुझे लगता है कि कई तरीकों से ... tx !!! – born2net

+2

@ born2net हाँ, इसका मतलब यही है। यहां से विधि के पास '() => शून्य' का रिटर्न प्रकार है, यह एक ऐसा फ़ंक्शन देता है जो कुछ भी वापस नहीं करता है। –

+0

@ born2net वाह, मैंने वास्तव में मूल स्पष्टीकरण को गड़बड़ कर दिया। मैंने '' 'को याद किया ... यह अभी तय है। उसके लिए माफ़ करना। –

0

सूचना पहले पेट - subscribe एक विधि प्रकार की एक सार्वजनिक संपत्ति है, एक विधि नहीं। सामने आया:

public subscribe: // public property, which is 
    (// of the type of a function, which takes 
     subscribeFunction: // 1 parameter, which itself is 
     (state) => void // a function of 1 parameter, returning nothing 
    ) => // and the upon invocation of a function stored in "subscribe" it 
     () => void; // returns a function of no parameter and no return value 

इस प्रकार, आप subscribe संपत्ति में एक समारोह के स्टोर कर सकते हैं, तो यह फोन, जबकि यह एक पैरामीटर के रूप में एक समारोह दे रही है, और एक परिणाम के रूप में आप एक और समारोह है, जो आपको बाद में फोन कर सकते हैं मिल जाएगा:

subscribe = (subscribeFunction: (state) => void) => { 
    subscribeFunction('A'); 
    return() => {console.log('C');}; 
}; 
let subscribed = subscribe((state) => { 
    console.log(state, 'B'); 
}); // prints 'A,B' 
subscribed(); // prints 'C' 
0

प्रतिक्रिया के लिए tx, अब है कि मैं यह समझ मुझे लगता है कि अपने सबसे अच्छे रूप बताया गया है:

सार्वजनिक सदस्यता ली है: (subscribeFunction: (राज्य) => शून्य)

// पहला औषधि सब्सक्राइब करने के लिए हैक्शन जो एक समारोह को स्वीकार करेगा जो कुछ भी वापस नहीं लौटाता

=>() => शून्य;

// दूसरा पोशन है ही सदस्यता के लिए के रूप में यह एक समारोह है कि कुछ भी वापस नहीं करता है वापस आ जाएगी ... और मैं मानता हूँ, इस तरह कोड

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