प्रकार संगतता संरचनात्मक सबटाइपिंग पर आधारित है, नाममात्र टाइपिंग नहीं। जिसके अनुसार, दो निम्नलिखित इंटरफ़ेस परिभाषाओं पर विचार करें:
interface IFoo { X: number }
interface IBar { X: number; Y: number }
IBar
का विस्तार करता है IFoo
? सं।
लेकिन IBar
के साथ संगत है? हाँ।
IFoo
के सदस्यों, IBar
सदस्यों का एक सबसेट है इस प्रकार आप किसी भी IBar
IFoo
को सौंप सकते हैं। लेकिन यह दूसरी तरह के आसपास काम नहीं करता:
var x: IFoo;
var y: IBar;
x = y // all good
y = x // type error, x has no Y member
इस तरह टाइपप्रति में सभी प्रकार यदि आप खाली इंटरफेस के रूप में यह के बारे में सोच Object
के साथ संगत कर रहे हैं। इस तरह आप Object
स्वीकार करने वाले कार्यों के लिए किसी वैध टाइपस्क्रिप्ट मान को पास कर सकते हैं और जावास्क्रिप्ट लिब लिखे जाने के तरीके के साथ अच्छी तरह से खेल सकते हैं।
मैं दस्तावेज़ों में Type Compatibility पढ़ने और पिछले पैराग्राफ सबटाइप बनाम असाइनमेंट पढ़ने का सुझाव देता हूं।
ठीक है, यह अनिवार्य रूप से स्पष्टीकरण है जिसे मैं अनुमान लगा रहा था (यह ध्यान देने के बाद कि मैं एक खाली इंटरफ़ेस को बूल भी निर्दिष्ट कर सकता हूं जिसे मैंने बुल कहा था, जो ऑब्जेक्ट के लिए आइसोमोर्फिक है)। मैं संरचनात्मक बनाम नाममात्र समझता हूं, लेकिन यह गैर-संदर्भ प्रकारों पर लागू होने की अपेक्षा नहीं करता था। मुझे लगता है कि यह केवल उस हद तक ध्वनि है जिस पर ऑब्जेक्ट में वास्तव में एक खाली इंटरफ़ेस है (यह देखते हुए कि संभवतः ऐसी चीजें हैं जो मैं किसी ऑब्जेक्ट पर कर सकता हूं जिसे मैं किसी संख्या या आदिम स्ट्रिंग पर नहीं कर सकता)। – Roly
मैं स्पष्टीकरण से खुश हूं, इसलिए मैंने जवाब स्वीकार कर लिया है। बाहर निकलता है क्योंकि मैं काटा नहीं जा रहा था क्योंकि नंबर <ऑब्जेक्ट (जो ठीक लगता है, ऊपर मेरी गुफा मॉड्यूलो), लेकिन क्योंकि फ़ंक्शन प्रकारों का उप-प्रकार बोर्कड लगता है। यहां एक नया प्रश्न है: http://stackoverflow.com/questions/39569016। – Roly
मुझे लगता है कि यहां एक भावना है जिसमें <ऑब्जेक्ट बेकार है: यह उदाहरण के ऊपरी-बंद को तोड़ देता है। दूसरे शब्दों में, एक्स <वाई और एक्स इंस्टॉर्फ़ एक्स को x उदाहरण को वाई उदाहरण देना चाहिए। – Roly