इंटरफेस सुनिश्चित करता है कि कि इंटरफ़ेस को लागू कार्यों के सभी कॉलर्स की आपूर्ति के लिए आवश्यक तर्क - data
और toUpper
।
क्योंकि टाइपस्क्रिप्ट समझता है कि यदि आप तर्कों का उपयोग नहीं करते हैं तो जावास्क्रिप्ट को कोई फर्क नहीं पड़ता है, यह चालाकी से इसे कार्यान्वयन में अनुमति देता है।
यह ठीक क्यों है? क्योंकि इसका मतलब है कि आप कॉलिंग कोड को प्रभावित किए बिना इंटरफेस के किसी भी कार्यान्वयन को प्रतिस्थापित कर सकते हैं।
उदाहरण: आप या तो IFormatter
कार्यान्वयन और कोड काम कर सकते हैं। जो कोड कम पठनीय बनाता है -
interface IFormatter {
(data: string, toUpper : bool): string;
};
var upperCaseFormatter: IFormatter = function (data: string) {
return data.toUpperCase();
}
var variableCaseFormatter: IFormatter = function (data: string, toUpper: bool) {
if (toUpper) {
return data.toUpperCase();
}
return data.toLowerCase();
}
// Switch between these at will
//var formatter = upperCaseFormatter;
var formatter = variableCaseFormatter;
formatter("test", true);
टाइपप्रति ऐसा नहीं करते हैं, तो आपके upperCaseFormatter
एक पैरामीटर toUpper
कहा जाता है कि समारोह में कहीं भी उपयोग नहीं किया गया है करने के लिए होगा।
लेकिन फिर 'upperCaseFormatter' का उपयोग करके एक अनावश्यक बूलियन मान होता है:' upperCaseFormatter ("test", true); // 'सत्य' को छोड़कर परिणामस्वरूप एक कंपाइलर चेतावनी होगी। तो इसके बजाय इंटरफेस गलत है और होना चाहिए: 'इंटरफेस IFormatter {(डेटा: स्ट्रिंग, toUpper?: बूल): स्ट्रिंग; } 'लेकिन इसका मतलब यह है कि आप 'variableCaseFormatter' को' variableCaseFormatter ('test') के साथ '' अपरिपर' निर्दिष्ट किए बिना 'फ़ंक्शन हस्ताक्षर में होने के बावजूद' का उपयोग कर सकते हैं। मेरे वर्तमान भ्रम के एक सरल उदाहरण के लिए यहां मेरा प्रश्न देखें: http://stackoverflow.com/questions/23305020 – AJP
@AJP अगर आप स्वच्छ कोड लिख रहे थे, तो आप कभी भी वेरिएबल केस फॉर्मेटर नहीं लिखेंगे। आप एक वर्ग को ऊपरी और एक के लिए लिखेंगे और पूरी तरह से ग़लत बूलियन तर्क से बचेंगे। – Fenton
@AJP अगर आप 'upperCaseFormatter' को सीधे कॉल करते हैं तो इंटरफ़ेस अप्रासंगिक है। –