2012-11-12 12 views
27

में टाइपस्क्रिप्ट पर धीरे-धीरे कैसे स्थानांतरित/माइग्रेट करने के लिए हमारे पास पहले से मौजूद जावास्क्रिप्ट सिस्टम है।एक मौजूदा जावास्क्रिप्ट सिस्टम

हम क्या करना चाहते हैं: हम वर्तमान प्रणाली में टाइपस्क्रिप्ट को एकीकृत करना शुरू करना चाहते हैं; हम सब कुछ टाइपस्क्रिप्ट में नहीं ले जा सकते हैं। हम धीरे-धीरे टाइपस्क्रिप्ट में कुछ नए मॉड्यूल लिखना शुरू करना चाहते हैं।

हमने क्या प्रयास किया: हम अपने जेएस कोड सिमिलर को मॉड्यूल टाइपस्क्रिप्ट निर्माण में व्यवस्थित करने के लिए एक पैटर्न का उपयोग करते हैं।

हमने टाइपस्क्रिप्ट में एक साधारण वर्ग/ऑब्जेक्ट को फिर से लिखने की कोशिश की और सफल रहे लेकिन हमें अन्य फ़ाइलों में हमारे कोड में परिभाषित जेएस फ़ंक्शंस तक पहुंचने में परेशानी हुई।

समस्याओं का सामना: हम डमी इंटरफेस बनाने के लिए किया था, और उन इंटरफेस आदि का उपयोग कर डमी कार्यों

तो सवाल: किसी को भी टिप्पणी, क्या सबसे अच्छा तरीका धीरे धीरे टाइपप्रति एकीकृत करने के लिए किया जाएगा कर सकते हैं एक मौजूदा जावास्क्रिप्ट सिस्टम में।

उत्तर

30

ऐसा लगता है कि आपके पास एक समझदार योजना है। मेरे अवलोकन यहाँ हैं!

यह सुनिश्चित करना सबसे अच्छा है कि टाइपस्क्रिप्ट आपकी जावास्क्रिप्ट पर निर्भर करता है और दूसरी तरफ जहां संभव हो। ऐसा इसलिए है क्योंकि विजुअल स्टूडियो टूल्स का उपयोग करके टाइपस्क्रिप्ट को दोबारा प्रतिक्रिया देना बहुत आसान है, लेकिन यह आपके टाइपस्क्रिप्ट को कॉल करने वाली जावास्क्रिप्ट को दोबारा नहीं करेगा।

आपको अपनी जावास्क्रिप्ट के हिस्सों के लिए परिभाषा फाइलों को लिखना होगा, आपको टाइपस्क्रिप्ट से कॉल करने की आवश्यकता है। आपको जावास्क्रिप्ट को टाइपस्क्रिप्ट में बदलने की लागत के साथ परिभाषा लिखने की लागत को संतुलित करने की आवश्यकता होगी।

यदि आप केवल एक फ़ंक्शन को कॉल कर रहे हैं, तो बस उस फ़ंक्शन के लिए परिभाषा लिखें - जब तक आपको इसकी आवश्यकता न हो, परिभाषा न लिखें। यह आपके पुराने कोड को कम करने की लागत को बनाए रखेगा।

आप अपने जावास्क्रिप्ट कोड पर कुछ भी कॉल करने के लिए अस्थायी रूप से any प्रकार का उपयोग कर सकते हैं। जब आप फ़ाइल को टाइपस्क्रिप्ट में कनवर्ट करते हैं तो आपको बेहतर प्रकार की जांच मिल जाएगी। यह एक "यह निर्भर करता है" निर्णय बिंदु है। परिभाषा लिखने में उम्र व्यतीत करने के बजाय, आप समय की जांच की लागत पर समय बचा सकते हैं।

उदाहरण के लिए ...

declare var MyExistingClass: any; 

अब आप कॉल कर सकते हैं ...

var example = new MyExistingClass.Anything(); 
example.anythingYouLike(); 

आप है कि क्या यह स्वीकार्य है या यदि आप परिभाषाओं लिखना चाहते हैं एक टीम के रूप में फैसला करने के लिए है:

declare class MyExistingClass { 
    anythingYouLike(): void; 
} 

मुझे उम्मीद है कि इससे मदद मिलती है।

+0

धन्यवाद स्टीव! हां यह मदद करता है, यह जानना अच्छा है कि विकल्प क्या हैं। समस्या यह है कि, अब हम बहुत सारे विशिष्ट कोड जोड़ रहे हैं जबकि अधिकांश पुन: प्रयोज्य कोड पहले ही लिखा जा चुका है; कुछ नए पर कोशिश कर रहे टाइपस्क्रिप्ट को उचित ठहराना आसान है, परीक्षण मॉड्यूल को फिर से लिखने पर इतना ज्यादा नहीं। लेकिन इसका मतलब है लिखने के लिए कई परिभाषाएं। तो बस एक जेएस फ़ाइल आयात करने का कोई तरीका नहीं है ताकि टाइपस्क्रिप्ट कम से कम जागरूक हो कि कुछ फ़ंक्शन मौजूद है? –

+0

आप पाते हैं कि यदि आप अपनी जावास्क्रिप्ट को टाइपस्क्रिप्ट फ़ाइल में पेस्ट करते हैं, तो कंपाइलर आपके लिए सभी प्रकारों का अनुमान लगाने में सक्षम होगा, लेकिन आप आमतौर पर पाते हैं कि आपकी जावास्क्रिप्ट में कुछ असंगतताएं हैं जिन्हें ठीक करने की आवश्यकता है। – Fenton

16

यह ऐसा कुछ है जिसे हमने हाल ही में टाइपस्क्रिप्ट में जावास्क्रिप्ट की लगभग 100,000 लाइनों के एचटीएमएल 5 गेम इंजन को ले जाने का सामना किया है। हमें जरूरी चरणों में इसे करना था, बस .js से .ts तक फ़ाइलों का नाम बदलकर और धीरे-धीरे वहां से आगे बढ़ना शुरू कर दिया।पूर्ण विवरण यहां रुचि रखने वाले किसी भी व्यक्ति के लिए है:

http://hardcodeded.blogspot.jp/2013/02/mostly-painlessly-migrating-3d-game.html

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