2016-09-18 51 views
6

यह कानूनी टाइपस्क्रिप्ट क्यों है?टाइपस्क्रिप्ट: ऑब्जेक्ट के संदर्भ के लिए असाइन करने योग्य संख्या क्यों है?

var x: number = 5 
var y: Object = x 

निश्चित रूप से कोई संख्या Object नहीं है। एक संदेह हो सकता है कि एक्स परोक्ष किसी ऑब्जेक्ट को मजबूर किया जाता है (ऑटो बॉक्स्ड), लेकिन कोई:

if (!(y instanceof Object)) { 
    console.log(typeof y) 
} 

प्रिंट

number 

रिकॉर्ड के लिए: टाइपप्रति में

$ tsc --version 
Version 1.8.10 

उत्तर

6

प्रकार संगतता संरचनात्मक सबटाइपिंग पर आधारित है, नाममात्र टाइपिंग नहीं। जिसके अनुसार, दो निम्नलिखित इंटरफ़ेस परिभाषाओं पर विचार करें:

interface IFoo { X: number } 
interface IBar { X: number; Y: number } 

IBar का विस्तार करता है IFoo? सं।

लेकिन IBar के साथ संगत है? हाँ।

IFoo के सदस्यों, IBar सदस्यों का एक सबसेट है इस प्रकार आप किसी भी IBarIFoo को सौंप सकते हैं। लेकिन यह दूसरी तरह के आसपास काम नहीं करता:

var x: IFoo; 
var y: IBar; 

x = y // all good 
y = x // type error, x has no Y member 

इस तरह टाइपप्रति में सभी प्रकार यदि आप खाली इंटरफेस के रूप में यह के बारे में सोच Object के साथ संगत कर रहे हैं। इस तरह आप Object स्वीकार करने वाले कार्यों के लिए किसी वैध टाइपस्क्रिप्ट मान को पास कर सकते हैं और जावास्क्रिप्ट लिब लिखे जाने के तरीके के साथ अच्छी तरह से खेल सकते हैं।

मैं दस्तावेज़ों में Type Compatibility पढ़ने और पिछले पैराग्राफ सबटाइप बनाम असाइनमेंट पढ़ने का सुझाव देता हूं।

+1

ठीक है, यह अनिवार्य रूप से स्पष्टीकरण है जिसे मैं अनुमान लगा रहा था (यह ध्यान देने के बाद कि मैं एक खाली इंटरफ़ेस को बूल भी निर्दिष्ट कर सकता हूं जिसे मैंने बुल कहा था, जो ऑब्जेक्ट के लिए आइसोमोर्फिक है)। मैं संरचनात्मक बनाम नाममात्र समझता हूं, लेकिन यह गैर-संदर्भ प्रकारों पर लागू होने की अपेक्षा नहीं करता था। मुझे लगता है कि यह केवल उस हद तक ध्वनि है जिस पर ऑब्जेक्ट में वास्तव में एक खाली इंटरफ़ेस है (यह देखते हुए कि संभवतः ऐसी चीजें हैं जो मैं किसी ऑब्जेक्ट पर कर सकता हूं जिसे मैं किसी संख्या या आदिम स्ट्रिंग पर नहीं कर सकता)। – Roly

+0

मैं स्पष्टीकरण से खुश हूं, इसलिए मैंने जवाब स्वीकार कर लिया है। बाहर निकलता है क्योंकि मैं काटा नहीं जा रहा था क्योंकि नंबर <ऑब्जेक्ट (जो ठीक लगता है, ऊपर मेरी गुफा मॉड्यूलो), लेकिन क्योंकि फ़ंक्शन प्रकारों का उप-प्रकार बोर्कड लगता है। यहां एक नया प्रश्न है: http://stackoverflow.com/questions/39569016। – Roly

+1

मुझे लगता है कि यहां एक भावना है जिसमें <ऑब्जेक्ट बेकार है: यह उदाहरण के ऊपरी-बंद को तोड़ देता है। दूसरे शब्दों में, एक्स <वाई और एक्स इंस्टॉर्फ़ एक्स को x उदाहरण को वाई उदाहरण देना चाहिए। – Roly

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

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