2013-01-02 23 views
12

मैं इस कहीं संबोधित किया गया है, कुछ बिंदु पर, बस मैं इतना यहाँ याद नहीं कर सकते मुझे के जीवन के लिए लगता है में गुंजाइश कार्यों से बाहर का उपयोग करते हुए मेरे सवाल है:टाइपप्रति

मैं कुछ जावास्क्रिप्ट काम कर रहा हूँ कि एक मौजूदा आवेदन में लोड किया जाएगा। इस एप्लिकेशन में उपलब्ध कार्यों के बकवास भार हैं और शायद ही इनमें से कोई भी मुझे ज्ञात है जिसे मैं वास्तव में उपयोग करना चाहता हूं। तो आइए कहें कि मुझे इस तथ्य के बारे में पता है कि window.srslyUsefulFunction मेरे लिए उपलब्ध होगा और मुझे इसे टाइपस्क्रिप्ट परिभाषा में पोर्ट करने के लिए बहुत अधिक परवाह नहीं है।

तो प्रश्न यह है कि मैं अपनी खुद की टाइपस्क्रिप्ट फ़ाइल में विंडो.srslyUsefulFunction का उपयोग कैसे कर सकता हूं इसके बिना परिभाषा तैयार किए?

उदाहरण: समारोह मौजूद

interface Window { 
    srslyUsefulFunction(id: number): void; 
} 

class MyClass { 
    doSomething() { 
     window.srslyUsefulFunction(1); 
    } 
} 
+0

'विंडो' एक वैश्विक वस्तु है, तो आपका उदाहरण वास्तव में काम करना चाहिए, अगर उस स्कोप में 'srslyUsefulFunction' घोषित किया गया है। – Cerbrus

+0

समस्या वास्तव में विंडो ऑब्जेक्ट नहीं है, लेकिन यह srslyUsefulFunction है जो मेरे प्रोजेक्ट में मौजूद नहीं है लेकिन यह कोड तब तैनात होगा जब यह कोड तैनात किया जाएगा। मैं एक मौजूदा ब्लैक-बॉक्स सिस्टम में "घटक" के रूप में कुछ जावास्क्रिप्ट जोड़ रहा हूं। मैं अपने जेनरेट जेएस में उस ब्लैक बॉक्स विधियों का उपयोग करने की कोशिश कर रहा हूं (क्योंकि मैं इसे स्थानीय रूप से नहीं चलाऊंगा क्योंकि यह निश्चित रूप से असफल होगा) – AlexR

उत्तर

14

आप Window इंटरफ़ेस करने के लिए समारोह में जोड़ सकते हैं और फिर अपने टाइपप्रति कार्यक्रम में इसका इस्तेमाल करते हैं। यदि ऐसा नहीं होता है, तो यह घोषणा:

if(!window.hasOwnProperty('srslyUsefulFunction') 
|| typeof window['srslyUsefulFunction'] !== "function"){ 
    window['srslyUsefulFunction'] = function(){ 
     console.log("You're only running a dummy implementation of srslyUsefulFunction here!"); 
    }; 
} 
+0

यह अच्छी चीजें है और यह चेक-अगर-मौजूद फ़ंक्शन की तुलना में थोड़ा क्लीनर लगता है , लेकिन टीएस फाइल के भीतर अनचेक 'नियमित जावास्क्रिप्ट' का उपयोग करने का कोई तरीका नहीं है? – AlexR

+0

@AlexR: जब तक मुझे टाइपस्क्रिप्ट की कोई चीज़ याद नहीं आती है, तो यह जवाब केवल मेरे द्वारा किए जा रहे कार्यों के विरोध में फ़ंक्शन को ओवरराइड कर रहा है। (जो वास्तव में जावास्क्रिप्ट में एक फ़ंक्शन को पॉलीफिल करता है) – Cerbrus

+4

आप टाइपस्क्रिप्ट फ़ाइल के भीतर नियमित जावास्क्रिप्ट का उपयोग कर सकते हैं, लेकिन यदि यह टाइपस्क्रिप्ट में पहले से परिभाषित कुछ नहीं बढ़ाता है, यानी विंडो को विंडो इंटरफ़ेस के कार्यान्वयन के रूप में पहले ही घोषित किया गया है। यदि आप 'खिड़की' के साथ फ़ंक्शन का उपयोग कर रहे थे - यानी इसे वैश्विक दायरे से खींच रहे हैं, तो आप 'srslyUsefulFunction घोषित कर सकते हैं: (आईडी: संख्या): शून्य; 'या यहां तक ​​कि ढीला और आसान' srsly घोषित करें उपयोगीफंक्शन: कोई भी;' – Fenton

1

की जांच:

class MyClass { 
    public MyMethod (id : string) : void { 
     // do something 
     var result = window.srslyUsefulFunction(id); 
     // do something (with the result) 
    } 
} 
+0

यह अभी भी टाइपस्क्रिप्ट में काम नहीं करेगा क्योंकि आपको अभी भी 'window.srslyUsefulFunction' परिभाषित नहीं किया जा रहा है। इस त्रुटि को साफ़ करने के लिए आपको 'विंडो' इंटरफ़ेस का विस्तार करना होगा। – Fenton

+0

@SteveFenton, फ़ंक्शन मौजूद है या नहीं, तो जांचने के इस तरीके के बारे में कैसे? ('typeof window.srslyUsefulFunction!== "फ़ंक्शन" 'केवल तभी चेक किया जाएगा जब यह मौजूद है) – Cerbrus

+1

आपकी सर्वश्रेष्ठ शर्त टाइपस्क्रिप्ट प्लेग्राउंड पर अपना कोड आज़माएं: http://www.typescriptlang.org/Playground/ – Fenton

4

मैं सरल समाधान का है।

index.html

function playIntro() { 
     intro = new lib.intro(); 
     onlinePlayer.contentContainer.addChild(intro); 
     stage.update(); 
    } 
मेरी Main.ts में

में मुझे लगता है कि जैसे कि यह फोन:

private onClick(event): void { 

     if (window.hasOwnProperty('playIntro')) { 
      window['playIntro'].call(); 
     } 
    } 

तो ... अगर आप कॉल करने के लिए वैश्विक विस्तार से "अंधा" js समारोह चाहते हैं , बस विंडो ["foo"] का उपयोग करें। कॉल();

+0

यह सुनहरा है। यह सुंदर 'साफ' एकीकृत करता है। यह शुरू करने के लिए एक गंदे गंदे हैक है तो क्यों हैक में एक और हैक जोड़ें! – JimB

संबंधित मुद्दे