क्या चल रहा है
मुद्दा यह है कि instanceof
जावास्क्रिप्ट से एक निर्माण है, और जावास्क्रिप्ट में, दाईं ओर के ऑपरेंड के लिए instanceof
एक मूल्य की उम्मीद है । विशेष रूप से, x instanceof Foo
जावास्क्रिप्ट में यह देखने के लिए रनटाइम चेक करेगा कि क्या Foo.prototype
प्रोटोटाइप श्रृंखला में कहीं भी मौजूद है x
।
हालाँकि, टाइपस्क्रिप्ट में, interface
कोई उत्सर्जन नहीं है। इसका मतलब है कि रनटाइम पर Foo
न तो Foo.prototype
मौजूद है, इसलिए यह कोड निश्चित रूप से विफल हो जाएगा।
टाइपस्क्रिप्ट आपको यह बताने की कोशिश कर रहा है कि यह कभी काम नहीं कर सकता । Foo
केवल एक प्रकार है, यह एक मूल्य नहीं है!
"इसके बजाय मैं क्या कर सकता हूं instanceof
?"
आप प्रकार गार्ड और उपयोगकर्ता-परिभाषित प्रकार गार्ड में देख सकते हैं ।
"लेकिन अगर मैं सिर्फ एक से बदल क्या interface
एक करने के लिए class
?"
आप एक से स्विच करने के लिए परीक्षा हो सकती है interface
एक करने के लिए class
है, लेकिन आप टाइपप्रति की संरचनात्मक प्रकार प्रणाली में है कि (जहां बातें मुख्य रूप से कर रहे हैं एहसास होना चाहिए आधारित आकार ), आप किसी भी एक वस्तु किसी वर्ग के रूप में ही आकार है कि उत्पादन कर सकते हैं:
class C {
a: number = 10;
b: boolean = true;
c: string = "hello";
}
let x = new C()
let y = {
a: 10, b: true, c: "hello",
}
x = y;
y = x;
इस मामले में, आपके पास x
और y
वह एक ही प्रकार का है, लेकिन यदि आप instanceof
किसी एक का उपयोग करने का प्रयास करते हैं , तो आपको दूसरे पर विपरीत परिणाम मिलेगा। तो instanceof
नहीं होगा वास्तव में आप बहुत प्रकार यदि आप टाइपप्रति में संरचनात्मक प्रकार का लाभ उठा रहे बारे में बताएं।
Foo | string
।