मैं VisualStudio 2012 में टाइपस्क्रिप्ट का परीक्षण कर रहा हूं और इसके प्रकार प्रणाली के साथ एक समस्या है। मेरे html साइट में आईडी "mycanvas" के साथ एक कैनवास टैग है। मैं इस कैनवास पर एक आयत बनाने की कोशिश कर रहा हूँ। यहाँ कोड है
var canvas = document.getElementById("mycanvas");
var ctx: CanvasRenderingContext2D = canvas.getContext("2d");
ctx.fillStyle = "#00FF00";
ctx.fillRect(0, 0, 100, 100);
दुर्भाग्य से VisualStudio की शिकायत है
संपत्ति 'getContext' का प्रकार 'HTMLElement' के मूल्य पर मौजूद नहीं है
यह त्रुटि के रूप में दूसरी पंक्ति को चिह्नित करता है। मैंने सोचा था कि यह केवल एक चेतावनी होगी लेकिन कोड संकलित नहीं करता है। VisualStudio का कहना है कि
बिल्ड एरर थे। क्या आप अंतिम सफल निर्माण जारी रखना और चलाना चाहेंगे?
मुझे यह त्रुटि बिल्कुल पसंद नहीं आई। कोई डायनेमिक विधि आमंत्रण क्यों नहीं है? सभी विधि के बाद getContext निश्चित रूप से मेरे कैनवास तत्व पर मौजूद है। हालाँकि मुझे लगा कि इस समस्या को हल करना आसान होगा। मैंने अभी कैनवास के लिए एक प्रकार का एनोटेशन जोड़ा है:
var canvas : HTMLCanvasElement = document.getElementById("mycanvas");
var ctx: CanvasRenderingContext2D = canvas.getContext("2d");
ctx.fillStyle = "#00FF00";
ctx.fillRect(0, 0, 100, 100);
लेकिन टाइप सिस्टम अभी भी संतुष्ट नहीं था। यहाँ नई त्रुटि संदेश है, इस बार पहली पंक्ति में:
'HTMLElement' को 'HTMLCanvasElement' में नहीं बदल सकते: 'HTMLCanvasElement' प्रकार से 'HTMLElement' टाइप की गई संपत्ति 'toDataURL' गायब है।
ठीक है, मैं स्टैटिक टाइपिंग के लिए बाहर हूं, लेकिन इससे भाषा बेकार हो जाती है। टाइप सिस्टम मुझे क्या करना चाहता है?
अपडेट करें:
टाइपस्क्रिप्ट में वास्तव में गतिशील आह्वान का कोई समर्थन नहीं है और मेरी समस्या टाइपकास्ट के साथ हल की जा सकती है। मेरा प्रश्न मूल रूप से इस एक टाइपस्क्रिप्ट का डुप्लिकेट है : कास्टिंग HTMLElement
CanvasRenderingContext2D
बजाय इसका उपयोग करना बेहतर हैany
।