टाइपस्क्रिप्ट या जावास्क्रिप्ट टाइप कास्टिंग


184

टाइपस्क्रिप्ट या जावास्क्रिप्ट में एक प्रकार की कास्टिंग कैसे होती है?

कहें कि मेरे पास निम्न टाइपस्क्रिप्ट कोड है:

module Symbology { 

    export class SymbolFactory { 

        createStyle( symbolInfo : SymbolInfo) : any { 
            if (symbolInfo == null)
            {
                 return null;
            }

            if (symbolInfo.symbolShapeType === "marker") {      

                // how to cast to MarkerSymbolInfo          
                return this.createMarkerStyle((MarkerSymbolInfo) symbolInfo);
            }                                  
        }

        createMarkerStyle(markerSymbol : MarkerSymbolInfo ): any { 
            throw "createMarkerStyle not implemented";
        }              

    }
}

SymbolInfoबेस क्लास कहां है मैं से typecasting कैसे निपटेंगे SymbolInfoको MarkerSymbolInfoटाइपप्रति या जावास्क्रिप्ट में?

जवाबों:


284

आप इस तरह कास्ट कर सकते हैं:

return this.createMarkerStyle(<MarkerSymbolInfo> symbolInfo);

या इस तरह अगर आप tsx मोड के साथ संगत होना चाहते हैं:

return this.createMarkerStyle(symbolInfo as MarkerSymbolInfo);

बस याद रखें कि यह एक संकलन-समय की कास्ट है, न कि रनटाइम कास्ट।


10
अब, मैं देख रहा हूं कि doc में, धारा 4.13 में टाइप अभिकथन के रूप में संदर्भित किया गया है।
क्लॉस नजी

यह उत्तर अब टाइपस्क्रिप्ट में टाइप अभिकथन की पूरी तस्वीर प्रदान नहीं करता है, जबकि एलेक्स का जवाब एक अधिक संपूर्ण चित्र देता है, और स्वीकृत उत्तर होना चाहिए।
क्रिस्टोफर डॉर्फ

@KristofferDorph यह उत्तर 4 साल पुराना है। टाइपस्क्रिप्ट लिखने के समय संस्करण 0.8.1 था, और इस तरह सही उत्तर था। JSX समर्थन केवल 3 साल बाद शामिल किया गया था।
ब्लोर्फिश

@blorkfish जो सच है, लेकिन यह समय का पालन करने के लिए अच्छा अभ्यास है, इसलिए आज एक ही सवाल पूछने वाले लोगों को वर्तमान उत्तर मिलता है, और ऐसा नहीं है जहां 4 साल पहले :-)
क्रिस्टोफर डॉर्फ

159

इसे टाइपस्क्रिप्ट में टाइप एसेसमेंट कहा जाता है , और टाइपस्क्रिप्ट 1.6 के बाद से, इसे व्यक्त करने के दो तरीके हैं:

// Original syntax
var markerSymbolInfo = <MarkerSymbolInfo> symbolInfo;

// Newer additional syntax
var markerSymbolInfo = symbolInfo as MarkerSymbolInfo;

दोनों विकल्प कार्यात्मक रूप से समान हैं । शुरू करने के लिए कारण as-syntax कि मूल वाक्य रचना के साथ विरोध हुआ है JSX , डिजाइन की चर्चा को देखें यहाँ

यदि आप चुनने की स्थिति में हैं, तो सिंटैक्स का उपयोग करें जिसे आप अधिक सहज महसूस करते हैं। मैं व्यक्तिगत asरूप से -syntax पसंद करता हूं क्योंकि यह पढ़ने और लिखने के लिए अधिक धाराप्रवाह लगता है।


2
आप टाइपस्क्रिप्ट को कैसे इंगित करते हैं कि आपने किसी ऑब्जेक्ट को दूसरे प्रकार में बदल दिया है? उदाहरण के लिए एक फंक जो टाइप 2 को लौटाता है, इसके अंदर http टाइप 1 हो जाता है, क्या तर्क को रूपांतरित करता है, और टाइप 1 क्या है, लेकिन अब टाइप 2 लौटाता है?
टोनी गुटिएरेज़

@TonyGutierrez आप रूपांतरण कैसे करते हैं?
एलेक्स

1
मूल रूप से एक संपत्ति लेते हैं और संशोधित करते हैं। मुझे ऐसा करने का एकमात्र तरीका एक नया var (type2) बनाना है और type1var से सहारा में कॉपी करना है और फिर इसे वापस करना है। आप टाइप 1 को संशोधित नहीं कर सकते और वापस नहीं लौट सकते, या आपको "कास्ट नहीं कर सकते" त्रुटि मिलती है।
टोनी गुटिएरेज़
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.