मैं टाइपप्रति में निर्माण हस्ताक्षरों के साथ इंटरफेस के साथ एक सा खेलने किया गया है टाइप नहीं है, और जब जांच टाइप करने में विफल निम्न मैं थोड़ा उलझन में बने:इंटरफेस जाँच
class Foo {
constructor() {
}
}
interface Bar {
new(): Bar;
}
function Baz(C : Bar) {
return new C()
}
var o = Baz(Foo);
प्रकार की त्रुटि है :
आपूर्ति मापदंडों कॉल लक्ष्य के किसी भी हस्ताक्षर मेल नहीं खाते: प्रकार 'बार' एक निर्माण हस्ताक्षर की आवश्यकता है, लेकिन प्रकार: प्रकार 'नई() => फू' और 'बार' हैं असंगत के हस्ताक्षर का निर्माण 'फू' की कमी एस एक (सी: बार) => बार
फू के निर्माता का प्रकार() => फू है, और यही वह है जो मैंने सोचा था कि बार ने कहा था। क्या मुझसे कोई चूक हो रही है?
'किसी भी' का उपयोग करने के बजाय आप एक सुपर इंटरफेस का उपयोग करते हैं (आप 'उपकरण' और 'विस्तार', बीटीडब्ल्यू छोड़ सकते हैं)। यह ठीक है, मुझे लगता है, और 'किसी भी' से बेहतर है, लेकिन एक चीज अभी भी मुझे खराब करती है: आप 'न्यूबलबैर :: नया() '' न्यूबलबैर' वापस क्यों नहीं दे सकते? यह एक प्रकार क्यों होना चाहिए जो 'न्यूबलबार 'से अधिक सामान्य ** है (और स्पष्ट रूप से कम से कम' फू 'के रूप में सामान्य)? –
@AdrianLang मैंने स्पष्ट विरासत और कार्यान्वयन को स्पष्ट होने के लिए रखा है, लेकिन आप सही हैं - टाइपस्क्रिप्ट खुशी से उनसे अनुमान लगाएगा यदि सबकुछ मेल खाता है। किसी विशेष प्रकार के रूप में विधि पर 'नया()' हस्ताक्षर का इलाज करने का प्रयास करते समय एक व्याख्या समस्या होती है। – Fenton
लेकिन, जब भी आप Foo में कुछ भी जोड़ने का प्रयास करते हैं तो यह टूट जाता है। संपादित करें: क्षमा करें, मैं इसे गलत कर रहा था। मेरा निर्माण हस्ताक्षर होना चाहिए: 'नया (... _: कोई []): बार; ' – farre