2012-10-31 35 views
6
interface test{ 
    foo(boo:string); 
} 
class coo implements test{ 
    foo(){ 

    } 
} 

पर कार्यों हस्ताक्षर के लिए मजबूर नहीं करता playGround में यह पैदा करते हैं और त्रुटि नहीं है, हालांकि समारोह हस्ताक्षर इंटरफ़ेस का कहना है के रूप में नहीं है, इंटरफ़ेस से अपेक्षित व्यवहार हस्ताक्षर के लिए मजबूर करने है ..टीएस इंटरफेस कार्यान्वयन

यह व्यवहार क्यों है?

धन्यवाद

उत्तर

3

यह दिलचस्प है। टाइपस्क्रिप्ट टीम काफी चालाक चाप है और उन्होंने जानबूझकर ऐसा करने का फैसला किया।

विचार यह है कि यदि आपका कार्य तर्क पारित किए बिना सही तरीके से काम कर सकता है, तो यह तर्क को सुरक्षित रूप से अनदेखा कर सकता है और इंटरफ़ेस को संतुष्ट कर सकता है। इसका मतलब है कि आप सभी कॉलिंग कोड को अपडेट किए बिना अपने कार्यान्वयन को प्रतिस्थापित कर सकते हैं।

इंटरफ़ेस यह सुनिश्चित करता है कि आप उन सभी मामलों में तर्क पारित कर चुके हैं जहां आप इंटरफ़ेस का उपभोग कर रहे हैं - इसलिए आपको कॉलर्स पर टाइपिंग जांच मिलती है और इससे कोई फर्क नहीं पड़ता कि आपकी ठोस कक्षा को किसी भी पैरामीटर की आवश्यकता नहीं है।

Interface Function Parameter Not Enforced

+0

मैंने सोचा कि यह एक बग होने के लिए भी स्पष्ट है .. अगर किसी को तो बीमार जवाब निशान एक और जवाब है इंतज़ार कर .. धन्यवाद –

+0

अपडेट किया गया टाइपप्रति टीम की ओर से प्रतिक्रिया के आधार पर। – Fenton

+0

धन्यवाद, लेकिन मेरे लिए मैं सही कार्यान्वयन सुनिश्चित करने के लिए पैरामीटर जांचना पसंद करूंगा, और कोई यह कहकर बहस कर सकता है कि मेरे पास एक इंटरफ़ेस में कोई फ़ंक्शन (arg1) नहीं है .. कक्षा में कहें .. यह कॉल करने योग्य नहीं होगा arg1 के बिना जब तक '?' का उपयोग करके arg1 की आवश्यकता नहीं है .. –