क्या चल रहा है
मुद्दा यह है कि 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।