टाइपस्क्रिप्ट का उपयोग करते समय मैं "JQuery प्रकार पर मौजूद संपत्ति" वाक्यविन्यास त्रुटियों को कैसे रोक सकता हूं?


80

मैं अपने आवेदन में केवल jQuery की एक पंक्ति का उपयोग कर रहा हूं:

$("div.printArea").printArea();

लेकिन यह मुझे एक टाइपस्क्रिप्ट त्रुटि दे रहा है:

संपत्ति 'प्रिंटअरे' टाइप JQuery पर मौजूद नहीं है?

क्या कोई मुझे बता सकता है कि मैं इस त्रुटि को दिखने से कैसे रोक सकता हूं?

जवाबों:


188

आप इसे <any>जोड़ सकते हैं या अपनी स्वयं की विधि जोड़ने के लिए jquery टाइपिंग बढ़ा सकते हैं।

 (<any>$("div.printArea")).printArea();

// या अपने स्वयं के कस्टम तरीके जोड़ें (मान लें कि यह कस्टम प्लगइन के एक भाग के रूप में अपने आप से जोड़ा गया है)

interface JQuery {
    printArea():void;
}

मुझे दे:Error:(44, 23) TS2339: Property 'printArea' does not exist on type 'ElementFinder'.
user47376

यदि आप interface JQueryकिसी बाहरी मॉड्यूल में रास्ता आज़माते हैं और फ़ंक्शन पैरामीटर को JQuery प्रकार के रूप में परिभाषित करते हैं और इसे किसी अन्य फ़ाइल से कॉल करने का प्रयास करते हैं, तो टाइपस्क्रिप्ट शिकायत करेगा कि JQuery नाम के दो प्रकार हैं जो असंबंधित हैं।
सैम रूबी

इंटरफ़ेस को घोषित करना बहुत अच्छा काम करता है। इसके अलावा सभी जगहों पर <any> को कास्टिंग करने से ज्यादा क्लीनर
11:57

यह मेरे लिए काम नहीं कर रहा था, लेकिन आखिरकार मैंने stackoverflow.com/questions/30960386/… पर ठोकर खाई , और महसूस किया कि मुझे declare global { ... }इंटरफ़ेस घोषणा के आसपास की आवश्यकता है ।
जेम्स हॉपकिन

44

मुझे लगता है कि यह सबसे पठनीय समाधान है:

($("div.printArea") as any).printArea();

12

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

(<any>$('.selector') ).function();

Ex: तारीख पिकर jquery का उपयोग करके आरंभ करें

(<any>$('.datepicker') ).datepicker();

3

अपने उदाहरण के लिए, आप इसे जोड़ेंगे:

interface JQuery{
    printArea():void;
}

संपादित करें: उफ़, बेसरात नीचे सही है। मुझे यकीन नहीं है कि मुझे लगा कि यह संकलन क्यों है लेकिन मैंने इस उत्तर को अपडेट किया है।


नहीं। वह $ के साथ एक वस्तु को लपेट रहा है। यह $ $ स्थिर नहीं है
बेस

हम्म, आपको यकीन है? मैंने एक परियोजना में परीक्षण किया और यह काम किया।
एलेक्स जूल 27'14

हाँ। आपका मामला $.inviewport(el)ऑप्स मामला$('selector').printArea
बेसरात

क्षमा करें, इसका मतलब यह नहीं है कि मेरी राय मेरे लिए काम करती है। सवाल यह है कि कोड संकलित करने के बारे में क्या लगता है, इसलिए यदि मेरा कोड संकलित करता है, तो इसके साथ क्या समस्या है? नोट, PrintArea () का उपयोग करके मेरा दूसरा उदाहरण भी काम करता है।
एलेक्स जुएल

$('selector').printAreaसंकलन करता है? मुझे ऐसा नहीं लगता। $.printAreaहालांकि संकलन होगा। आप बहुत विनम्र रहे हैं इसलिए कोई अपराध नहीं किया गया है या इरादा नहीं है :)
बेसरात

2

चूंकि printArea एक jQuery प्लगइन है, इसे jquery.d.ts में शामिल नहीं किया गया है।

आपको jquery.printArea.ts परिभाषा फ़ाइल बनाने की आवश्यकता है।

यदि आप प्लगइन के लिए एक पूर्ण परिभाषा फ़ाइल बनाते हैं, तो आप इसे निश्चित रूप से जमा करना चाहते हैं ।


और सुनिश्चित करें कि आपका tsconfig.json सेटअप सही भी है। यदि इसकी "प्रकार" सेटिंग है तो केवल सूचीबद्ध प्रकारों को ही पहचाना जाएगा। यदि नहीं, तो वह
डैन

2

आप इसे इस तरह भी लिख सकते हैं:

let elem: any;
elem = $("div.printArea");
elem.printArea();

2

आप संकेतन सिंटैक्स का उपयोग करने के बजाय (या 'किसी भी रूप में बेहतर') नोटेशन का उपयोग कर सकते हैं:

// @ts-ignore
$("div.printArea").printArea();
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.