2013-04-25 8 views
5

यदि मैं यह टीएस है मॉड्यूल:टाइपप्रति एएमडी कार्यान्वयन जावास्क्रिप्ट/RequireJS साथ बुरा

export function say(){ 
    console.log("said"); 
} 

और मैं AMD विकल्प के साथ यह संकलन मैं इसे एक ts ग्राहक से काफी आसानी से उपयोग कर सकते हैं:

import foo = module("tsmodule") 
foo.say(); 

export var x = 123; 

लेकिन अगर मैं ts मॉड्यूल के लिए जावास्क्रिप्ट बराबर है:

define(["require", "exports"], function(require, exports) { 
    function say() { 
     console.log("said"); 
    } 
    exports.say = say; 
}) 

यह आसानी से उपयोग करने के लिए कोई तरीका नहीं है। सरल संभव समाधान:

// of course you can use .d.ts for requirejs but that is beside the point 
declare var require:any; 

// will fail with error module has not been loaded yet for context 
// http://requirejs.org/docs/errors.html#notloaded 
var useme = require("jsmodule") 
useme.say(); 

export var x = 123; 
import foo = module("tsmodule") 
foo.say(); 

त्रुटि http://requirejs.org/docs/errors.html#notloaded के कारण विफल रहता। चूंकि जनरेटेड टाइपस्क्रिप्ट में परिभाषित कॉल को "jsmodule" पास नहीं किया गया था।

दो तरीके दिए मैं

  • आयात/निर्यात (भाषा सुविधाओं खो)
  • उपयोग की आवश्यकता ([]) (अभी भी कुछ है कि आवश्यकता होती है पर निर्भर करता है निर्यात नहीं कर सकते ([का उपयोग नहीं करते ]) कॉल)

की सीमाएं हैं: https://github.com/basarat/typescript-requirejs। क्या कोई और तरीका है? यदि नहीं तो आप यहां मतदान कर सकते हैं: https://typescript.codeplex.com/workitem/948 :)

उत्तर

3

आप एक जावास्क्रिप्ट मॉड्यूल में लोड करने के लिए आप हमेशा (बुरी तरह से प्रलेखित) amd-dependency टैग इस्तेमाल कर सकते हैं चाहते हैं:

/// <amd-dependency path="jsmodule" /> 

यह निर्भरता सरणी में jsmodule डाल देंगे आपके परिभाषित कॉल का।

और फिर एक घोषणा फ़ाइल जिसमें आप बस

module useme { 
    function say(): void; 
} 
+1

जाहिरा तौर पर एक गैर-दस्तावेजी सुविधा राज्य हैं प्रदान करते हैं और मेरे tsc संस्करण 0.9.0 अल्फा के साथ काम नहीं करता। मुझे संस्करण 0.8 – basarat

+0

ओ शूट करने के लिए अनइंस्टॉल/इंस्टॉल करने दें, उन्होंने इसे 0.9 में हटा दिया ?! मैं 0.8.1.1 का उपयोग कर रहा हूँ। – thomaux

+2

0.8.3 में काम करता है। लेकिन 0.9.0alpha – basarat

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