javascript - ऑपर - टाइपस्क्रिप्ट क्या है और मैं जावास्क्रिप्ट के स्थान पर इसका उपयोग क्यों करूं?




हिंदी में जावास्क्रिप्ट परिचय (4)

मैंने मूल रूप से यह जवाब लिखा था जब टाइपस्क्रिप्ट अभी भी हॉट-द-द प्रेस था। पांच साल बाद, यह एक ठीक अवलोकन है, लेकिन अधिक गहराई के लिए नीचे लोदेविज्क का जवाब देखें

1000 फीट व्यू ...

टाइपस्क्रिप्ट जावास्क्रिप्ट का एक सुपरसेट है जो मुख्य रूप से वैकल्पिक स्थैतिक टाइपिंग, कक्षाएं और इंटरफेस प्रदान करता है। बड़े लाभों में से एक यह है कि आईडीई को सामान्य त्रुटियों को ढूंढने के लिए एक समृद्ध वातावरण प्रदान करने के लिए सक्षम करें जैसे आप कोड टाइप करते हैं

मेरा मतलब क्या है, इसका विचार पाने के लिए, भाषा पर माइक्रोसॉफ्ट के प्रारंभिक वीडियो देखें

एक बड़ी जावास्क्रिप्ट प्रोजेक्ट के लिए, टाइपस्क्रिप्ट को अपनाने के परिणामस्वरूप अधिक मजबूत सॉफ्टवेयर हो सकता है, जबकि अभी भी तैनाती योग्य है जहां एक नियमित जावास्क्रिप्ट एप्लिकेशन चलाया जाएगा।

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

क्या ऐसी अन्य तकनीकें हैं?

CoffeeScript , लेकिन यह वास्तव में एक अलग उद्देश्य की सेवा करता है। आईएमएचओ, कॉफीस्क्रिप्ट मनुष्यों के लिए पठनीयता प्रदान करता है, लेकिन टाइपस्क्रिप्ट भी अपने वैकल्पिक स्थैतिक टाइपिंग के माध्यम से उपकरणों के लिए गहरी पठनीयता प्रदान करता है (इस हालिया ब्लॉग पोस्ट को थोड़ा और आलोचना के लिए देखें)। Dart भी है लेकिन यह जावास्क्रिप्ट के प्रतिस्थापन पर पूर्ण है (हालांकि यह जावास्क्रिप्ट कोड उत्पन्न कर सकता है )

उदाहरण

उदाहरण के तौर पर, यहां कुछ टाइपस्क्रिप्ट है (आप टाइपस्क्रिप्ट प्लेग्राउंड में इसके साथ खेल सकते हैं)

class Greeter {
    greeting: string;
    constructor (message: string) {
        this.greeting = message;
    }
    greet() {
        return "Hello, " + this.greeting;
    }
}  

और यहां जावास्क्रिप्ट का उत्पादन होगा

var Greeter = (function () {
    function Greeter(message) {
        this.greeting = message;
    }
    Greeter.prototype.greet = function () {
        return "Hello, " + this.greeting;
    };
    return Greeter;
})();

ध्यान दें कि टाइपस्क्रिप्ट सदस्य चर और वर्ग विधि पैरामीटर के प्रकार को परिभाषित करता है। जावास्क्रिप्ट में अनुवाद करते समय इसे हटा दिया जाता है, लेकिन आईडीई और कंपाइलर द्वारा त्रुटियों को स्पॉट करने के लिए उपयोग किया जाता है, जैसे कि कन्स्ट्रक्टर को संख्यात्मक प्रकार गुजरना।

यह उन प्रकारों को घुमाने में भी सक्षम है जिन्हें स्पष्ट रूप से घोषित नहीं किया गया है, उदाहरण के लिए, यह निर्धारित करेगा कि greet() विधि एक स्ट्रिंग देता है।

डिबगिंग टाइपस्क्रिप्ट

कई ब्राउज़र और आईडीई स्रोतमैप के माध्यम से प्रत्यक्ष डीबगिंग समर्थन प्रदान करते हैं। अधिक जानकारी के लिए यह स्टैक ओवरफ़्लो प्रश्न देखें: विजुअल स्टूडियो के साथ टाइपस्क्रिप्ट कोड डिबग करना

अधिक जानना चाहते हैं?

मैंने मूल रूप से यह जवाब लिखा था जब टाइपस्क्रिप्ट अभी भी हॉट-द-द प्रेस था। कुछ और वर्तमान विस्तार के लिए इस सवाल के लिए लोदेविज्क का जवाब देखें ।

क्या आप कृपया वर्णन कर सकते हैं कि टाइपस्क्रिप्ट भाषा क्या है?

यह क्या कर सकता है कि जावास्क्रिप्ट या उपलब्ध पुस्तकालय नहीं कर सकते हैं, जिससे मुझे इस पर विचार करने का कारण मिलेगा?


" टाइपस्क्रिप्ट फंडामेंटल्स " - डैन वाहिलिन और जॉन पापा द्वारा एक प्लुरसाइट वीडियो-कोर्स वास्तव में अच्छा है, वर्तमान में (25 मार्च, 2016) टाइपस्क्रिप्ट 1.8 को प्रतिबिंबित करने के लिए टाइपस्क्रिप्ट 1.8 को प्रतिबिंबित करने के लिए अपडेट किया गया है।

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

संक्षेप में : यदि इरादे के रूप में उपयोग किया जाता है, तो टाइपस्क्रिप्ट जावास्क्रिप्ट प्रोग्रामिंग को अधिक विश्वसनीय और आसान बना सकता है। यह पूर्ण एसडीएलसी पर जावास्क्रिप्ट प्रोग्रामर की उत्पादकता में काफी वृद्धि कर सकता है।


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

वर्तमान में टाइपस्क्रिप्ट ES2015 का एक सुपर सेट है, इसलिए नई जेएस सुविधाओं को सीखना शुरू करने और अपनी परियोजना के लिए आवश्यक मानक में पारदर्शी होने के लिए एक अच्छा विकल्प हो सकता है।


हालांकि स्वीकृत उत्तर ठीक है, मुझे लगा कि यह वास्तव में इस बिंदु पर टाइपस्क्रिप्ट न्याय नहीं करता है। यह अब शुरुआती दिनों नहीं है। TypeScript में लिखे जाने वाले कई लोकप्रिय ढांचे के साथ टाइपस्क्रिप्ट अब बहुत अधिक गोद ले रहा है। जावास्क्रिप्ट के बजाय टाइपस्क्रिप्ट चुनने के कारण अब बहुत से हैं।

जावास्क्रिप्ट से संबंध

जावास्क्रिप्ट ईसीएमएस्क्रिप्ट मानकों के माध्यम से मानकीकृत है। उपयोग में आने वाले सभी ब्राउज़र नए ईसीएमएस्क्रिप्ट मानकों की सभी सुविधाओं का समर्थन नहीं करते हैं (इस table देखें)। टाइपस्क्रिप्ट नए ईसीएमएस्क्रिप्ट मानकों का समर्थन करता है और उन्हें आपके चयन के (पुराने) ईसीएमएस्क्रिप्ट लक्ष्य (वर्तमान लक्ष्य 3, 5 और 6 [उर्फ 2015]) को संकलित करता है। इसका मतलब है कि आप ES2015 और उससे परे की सुविधाओं का उपयोग कर सकते हैं, जैसे मॉड्यूल, लैम्ब्डा फ़ंक्शंस, क्लासेस, स्प्रेड ऑपरेटर, विनाशकारी, आज। यह पाठ्यक्रम के प्रकार का समर्थन भी जोड़ता है, जो किसी भी ईसीएमएस्क्रिप्ट मानक का हिस्सा नहीं है और संभवतः जावास्क्रिप्ट की संकलित प्रकृति की बजाय व्याख्या की गई प्रकृति के कारण कभी नहीं हो सकता है। टाइपस्क्रिप्ट की प्रकार प्रणाली अपेक्षाकृत समृद्ध है और इसमें शामिल हैं: इंटरफेस, एनम्स, हाइब्रिड प्रकार, जेनेरिक, यूनियन और चौराहे के प्रकार, एक्सेस संशोधक और बहुत कुछ। टाइपस्क्रिप्ट की आधिकारिक वेबसाइट इन सुविधाओं का एक सिंहावलोकन देता है।

अन्य जावास्क्रिप्ट लक्ष्यीकरण भाषाओं से संबंध

टाइपस्क्रिप्ट में जावास्क्रिप्ट को संकलित करने वाली अन्य भाषाओं की तुलना में एक अद्वितीय दर्शन है। जावास्क्रिप्ट कोड मान्य टाइपस्क्रिप्ट कोड है; टाइपस्क्रिप्ट जावास्क्रिप्ट का एक सुपरसेट है। आप अपने .js फ़ाइलों को .ts फ़ाइलों में लगभग बदल सकते हैं और टाइपस्क्रिप्ट का उपयोग शुरू कर सकते हैं। टाइपस्क्रिप्ट फ़ाइलों को पठनीय जावास्क्रिप्ट में संकलित किया जाता है, ताकि माइग्रेशन वापस संभव हो और संकलित टाइपस्क्रिप्ट को समझना मुश्किल नहीं है। इस प्रकार टाइपस्क्रिप्ट अपनी कमजोरियों में सुधार करते समय जावास्क्रिप्ट की सफलताओं पर बनाता है।

एक तरफ, आपके पास भविष्य के सबूत उपकरण हैं जो आधुनिक ईसीएमएस्क्रिप्ट मानकों को लेते हैं और इसे पुराने जावास्क्रिप्ट संस्करणों में संकलित करते हैं, जिसमें बेबेल सबसे लोकप्रिय है। दूसरी तरफ, आपके पास ऐसी भाषाएं हैं जो जावास्क्रिप्ट को पूरी तरह से भिन्न कर सकती हैं जो जावास्क्रिप्ट को लक्षित करती है, जैसे कॉफ़ीस्क्रिप्ट, क्लोजर, डार्ट, एल्म, हक्स, स्कैलाज, और एक संपूर्ण होस्ट अधिक (इस list देखें)। ये भाषाएं, हालांकि वे जावास्क्रिप्ट के भविष्य के नेतृत्व में कहीं बेहतर हो सकती हैं, उनके वायदा के लिए पर्याप्त गोद लेने की पर्याप्त जोखिम नहीं है। इन भाषाओं में से कुछ के लिए अनुभवी डेवलपर्स को खोजने में आपको और भी परेशानी हो सकती है, हालांकि जो लोग आप पाएंगे वे अक्सर अधिक उत्साही हो सकते हैं। जावास्क्रिप्ट के साथ इंटरऑप थोड़ा और भी शामिल हो सकता है, क्योंकि वे वास्तव में जावास्क्रिप्ट से क्या हटाए जाते हैं।

टाइपस्क्रिप्ट इन दो चरम सीमाओं के बीच में बैठता है, इस प्रकार जोखिम को संतुलित करता है। टाइपस्क्रिप्ट किसी भी मानक द्वारा जोखिम भरा विकल्प नहीं है। यदि आप जावास्क्रिप्ट से परिचित हैं, तो इसका उपयोग करने में बहुत कम प्रयास होता है, क्योंकि यह पूरी तरह से अलग भाषा नहीं है, इसमें उत्कृष्ट जावास्क्रिप्ट इंटरऑपरेबिलिटी सपोर्ट है और हाल ही में इसमें बहुत सारे गोद लेने को देखा गया है।

वैकल्पिक रूप से स्थिर टाइपिंग और प्रकार अनुमान

जावास्क्रिप्ट गतिशील रूप से टाइप किया गया है। इसका अर्थ यह है कि जावास्क्रिप्ट को पता नहीं है कि एक चर का प्रकार तब तक है जब तक कि यह वास्तव में रन-टाइम पर तत्काल नहीं होता है। इसका मतलब यह भी है कि यह बहुत देर हो सकती है। टाइपस्क्रिप्ट जावास्क्रिप्ट में टाइप समर्थन जोड़ता है। यदि आप अपने कार्ड सही तरीके से खेलते हैं तो कुछ निश्चित चर के कुछ चर के झूठी धारणाओं के कारण होने वाली बग पूरी तरह उन्मूलन की जा सकती है; आप अपना कोड कितना सख्त टाइप करते हैं या यदि आप अपना कोड टाइप करते हैं तो आप पर निर्भर है।

टाइपस्क्रिप्ट टाइपिंग अनुमान के उपयोग से थोड़ा आसान टाइपिंग और बहुत कम स्पष्ट बनाता है। उदाहरण के लिए: टाइपस्क्रिप्ट में var x = "hello" var x : string = "hello" जैसा ही है। इस प्रकार का उपयोग बस इसके उपयोग से अनुमानित है। यहां तक ​​कि आप स्पष्ट रूप से प्रकारों को टाइप नहीं करते हैं, फिर भी वे आपको कुछ ऐसा करने से बचाने के लिए हैं जो अन्यथा रन-टाइम त्रुटि के परिणामस्वरूप होगा।

टाइपस्क्रिप्ट को वैकल्पिक रूप से डिफ़ॉल्ट रूप से टाइप किया जाता है। उदाहरण के लिए function divideByTwo(x) { return x / 2 } टाइपस्क्रिप्ट में एक वैध फ़ंक्शन है जिसे किसी भी प्रकार के पैरामीटर के साथ बुलाया जा सकता है, भले ही इसे स्ट्रिंग के साथ कॉल करना निश्चित रूप से रनटाइम त्रुटि में परिणाम देगा। जैसे आप जावास्क्रिप्ट में उपयोग किया जाता है। यह काम करता है, क्योंकि जब किसी प्रकार को स्पष्ट रूप से असाइन नहीं किया गया था और प्रकार का अनुमान नहीं लगाया जा सकता था, जैसे विभाजन में दो उदाहरण, टाइपस्क्रिप्ट निश्चित रूप से any प्रकार को असाइन करेगा। इसका मतलब है कि divideByTwo फ़ंक्शन का प्रकार हस्ताक्षर स्वचालित रूप से function divideByTwo(x : any) : any हो जाता function divideByTwo(x : any) : any । इस व्यवहार को अस्वीकार करने के लिए एक कंपाइलर ध्वज है: --noImplicitAny । इस ध्वज को सक्षम करने से आपको अधिक सुरक्षा मिलती है, लेकिन इसका मतलब यह भी है कि आपको अधिक टाइपिंग करना होगा।

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

यह ध्यान रखना दिलचस्प है कि यह वही पेपर पाता है कि टाइपस्क्रिप्ट कम त्रुटि प्रवण है तो जावास्क्रिप्ट:

सकारात्मक गुणांक वाले लोगों के लिए हम उम्मीद कर सकते हैं कि भाषा, कैटरिस परिभ्रमण, दोष संख्याओं की एक बड़ी संख्या से जुड़ी है। इन भाषाओं में सी, सी ++, जावास्क्रिप्ट , ऑब्जेक्टिव-सी, पीएचपी और पायथन शामिल हैं। क्लोजर , हास्केल, रुबी, स्कैला और टाइपस्क्रिप्ट भाषाएं सभी में ऋणात्मक गुणांक हैं जो यह दर्शाते हैं कि इन भाषाओं में औसत की तुलना में कम होने की संभावना कम होती है।

उन्नत आईडीई समर्थन

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

आईडीई की एक विस्तृत श्रृंखला है जिसमें टाइपस्क्रिप्ट के लिए उत्कृष्ट समर्थन है, जैसे विजुअल स्टूडियो और वीएस कोड, एटम, सब्लिम, और इंटेलिजे / वेबस्टॉर्म।

सख्त नल चेक

फॉर्म की रनटाइम त्रुटियां cannot read property 'x' of undefined या undefined is not a function cannot read property 'x' of undefined undefined is not a function सामान्य रूप से जावास्क्रिप्ट कोड में बग के कारण नहीं होता है। बॉक्स के बाहर टाइपस्क्रिप्ट पहले से ही इस तरह की त्रुटियों की संभावना को कम कर देता है, क्योंकि कोई एक चर का उपयोग नहीं कर सकता है जो टाइपस्क्रिप्ट कंपाइलर ( any टाइप किए गए चर के गुणों के अपवाद के साथ) के लिए ज्ञात नहीं है। यह अभी भी संभव है हालांकि गलती से एक वेरिएबल का उपयोग करें जो undefined सेट है। हालांकि, टाइपस्क्रिप्ट के 2.0 संस्करण के साथ आप गैर-शून्य प्रकारों के उपयोग के माध्यम से इन प्रकार की त्रुटियों को एक साथ समाप्त कर सकते हैं। यह निम्नानुसार काम करता है:

सख्त नल चेक सक्षम ( --strictNullChecks संकलक ध्वज) के साथ टाइपस्क्रिप्ट कंपाइलर एक चर के लिए undefined होने की अनुमति नहीं देगा जबतक कि आप स्पष्ट रूप से इसे शून्य प्रकार के घोषित नहीं करते हैं। उदाहरण के लिए, let x : number = undefined परिणामस्वरूप संकलन त्रुटि होगी। यह टाइप सिद्धांत के साथ पूरी तरह से फिट बैठता है, क्योंकि undefined एक संख्या नहीं है। कोई x को एक प्रकार का number होने के लिए परिभाषित कर सकता है और इसे ठीक करने के लिए undefined : let x : number | undefined = undefined let x : number | undefined = undefined

एक बार एक प्रकार को शून्य के रूप में जाना जाता है, जिसका अर्थ है कि यह एक प्रकार का है जो मूल्य null या undefined , टाइपस्क्रिप्ट कंपाइलर नियंत्रण प्रवाह आधारित प्रकार विश्लेषण के माध्यम से निर्धारित कर सकता है कि आपका कोड सुरक्षित रूप से एक चर का उपयोग कर सकता है या नहीं। दूसरे शब्दों में जब आप एक चर की जांच करते हैं तो उदाहरण के लिए undefined होता है उदाहरण के लिए if एक कथन स्टेटस्क्रिप्ट कंपाइलर अनुमान लगाएगा कि आपके कोड के नियंत्रण प्रवाह की उस शाखा में टाइप अब और शून्य नहीं है और इसलिए सुरक्षित रूप से उपयोग किया जा सकता है। ये रहा एक सरल उदाहरण:

let x: number | undefined;
if (x !== undefined) x += 1; // this line will compile, because x is checked.
x += 1; // this line will fail compilation, because x might be undefined.

बिल्डस्क्रिप्ट एंडर्स हेजल्सबर्ग के 2016 सम्मेलन सह-डिजाइनर के निर्माण के दौरान इस सुविधा का एक विस्तृत स्पष्टीकरण और प्रदर्शन दिया गया: video (44:30 से 56:30 तक)।

संकलन

टाइपस्क्रिप्ट का उपयोग करने के लिए आपको जावास्क्रिप्ट कोड को संकलित करने के लिए एक बिल्ड प्रक्रिया की आवश्यकता है। निर्माण प्रक्रिया में आमतौर पर आपके प्रोजेक्ट के आकार के आधार पर केवल कुछ सेकंड लगते हैं। टाइपस्क्रिप्ट कंपाइलर वृद्धिशील संकलन ( --watch कंपाइलर ध्वज) का समर्थन करता है, ताकि सभी बाद के परिवर्तनों को अधिक गति से संकलित किया जा सके।

टाइपस्क्रिप्ट कंपाइलर उत्पन्न .js फ़ाइलों में स्रोत मानचित्र जानकारी को इनलाइन कर सकता है या अलग .map फ़ाइलों को बना सकता है। स्रोत मानचित्र जानकारी का प्रयोग क्रोम देवटूल और अन्य आईडीई जैसे डीबगिंग यूटिलिटीज द्वारा जावास्क्रिप्ट में लाइनों को टाइपस्क्रिप्ट में जेनरेट करने के लिए किया जा सकता है। यह आपके लिए अपने टाइपस्क्रिप्ट कोड पर सीधे रनटाइम के दौरान ब्रेकपॉइंट्स सेट करने और चर का निरीक्षण करने के लिए संभव बनाता है। स्रोत मानचित्र जानकारी बहुत अच्छी तरह से काम करती है, यह टाइपस्क्रिप्ट से काफी पहले थी, लेकिन डिस्गिंग टाइपस्क्रिप्ट आम तौर पर जावास्क्रिप्ट का उपयोग करते समय उतना ही महान नहीं है। उदाहरण के लिए this कीवर्ड को ले लो। ES2015 के बाद this कीवर्ड के बंद किए गए अर्थशास्त्र के कारण, this वास्तव में रनटाइम के दौरान _this नामक चर के रूप में मौजूद हो सकता है ( यह उत्तर देखें)। यह आपको डिबगिंग के दौरान भ्रमित कर सकता है, लेकिन यदि आप इसके बारे में जानते हैं या जावास्क्रिप्ट कोड का निरीक्षण करते हैं तो आम तौर पर कोई समस्या नहीं है। यह ध्यान दिया जाना चाहिए कि बेबेल को एक ही तरह की समस्या का सामना करना पड़ता है।

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

वेबपैक, Gulp , ग्रंट के लिए टाइपस्क्रिप्ट संकलन प्लगइन्स उपलब्ध हैं और वहां कहीं भी कोई अन्य जावास्क्रिप्ट निर्माण उपकरण उपलब्ध है। टाइपस्क्रिप्ट दस्तावेज़ में सभी को कवर करने वाले निर्माण टूल के साथ एकीकृत करने पर एक अनुभाग है। यदि आप और अधिक समय की जांच करना चाहते हैं तो एक linter भी उपलब्ध है। वहां बड़ी संख्या में बीज परियोजनाएं भी हैं जो आपको टाइपस्क्रिप्ट के साथ संयोजन में शुरू करेंगी जैसे कि एंगुलर 2, रिएक्ट, एम्बर, सिस्टमजे, वेबपैक, गुलप इत्यादि जैसी अन्य तकनीकों के समूह के साथ।

जावास्क्रिप्ट इंटरऑपरेबिलिटी

चूंकि टाइपस्क्रिप्ट जावास्क्रिप्ट से बहुत करीबी से संबंधित है, इसकी बड़ी इंटरऑपरेबिलिटी क्षमताएं हैं, लेकिन टाइपस्क्रिप्ट में जावास्क्रिप्ट पुस्तकालयों के साथ काम करने के लिए कुछ अतिरिक्त काम की आवश्यकता है। टाइपस्क्रिप्ट परिभाषाओं की आवश्यकता है ताकि टाइपस्क्रिप्ट कंपाइलर समझ सके कि _.groupBy या angular.copy या $.fadeOut जैसे फ़ंक्शन कॉल वास्तव में अवैध कथन नहीं हैं। इन कार्यों के लिए परिभाषाओं को .d.ts फ़ाइलों में रखा गया है।

किसी परिभाषा को किसी भी तरीके से उपयोग करने की अनुमति देने के लिए एक परिभाषा सबसे सरल रूप ले सकती है। उदाहरण के लिए, Lodash का उपयोग करते Lodash , एक पंक्ति परिभाषा फ़ाइल declare var _ : any आपको किसी भी फ़ंक्शन को कॉल करने की अनुमति देगा, लेकिन फिर भी आप अभी भी गलतियां करने में सक्षम हैं: _.foobar() एक होगा कानूनी टाइपस्क्रिप्ट कॉल, लेकिन निश्चित रूप से रन-टाइम पर एक अवैध कॉल है। यदि आप उचित प्रकार का समर्थन और कोड पूरा करना चाहते हैं तो आपकी परिभाषा फ़ाइल को और सटीक होना चाहिए (उदाहरण के लिए लॉसश परिभाषाएं देखें)।

एनपीएम मॉड्यूल जो स्वयं की टाइप परिभाषाओं के साथ प्री-पैक किए जाते हैं उन्हें टाइपस्क्रिप्ट कंपाइलर ( documentation देखें) द्वारा स्वचालित रूप से समझा जाता है। किसी भी अन्य अर्ध-लोकप्रिय जावास्क्रिप्ट लाइब्रेरी के लिए जिसमें अपनी परिभाषा शामिल नहीं है, वहां किसी ने पहले से ही किसी अन्य एनपीएम मॉड्यूल के माध्यम से टाइप परिभाषाएं उपलब्ध कराई हैं। ये मॉड्यूल "@ प्रकार /" के साथ उपसर्ग किए गए हैं और एक DefinitelyTyped से परिभाषित गीथब रिपोजिटरी से आते हैं जिन्हें परिभाषित किया जाता है।

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

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

जावास्क्रिप्ट से टाइपस्क्रिप्ट में कनवर्ट करना

किसी भी .js फ़ाइल का नाम बदलकर एक .ts तक किया जा सकता है और आउटपुट के रूप में सिंटैक्टिक रूप से एक ही जावास्क्रिप्ट कोड प्राप्त करने के लिए टाइपस्क्रिप्ट कंपाइलर के माध्यम से चलाया जाता है (यदि यह पहले स्थान पर वाक्यगत रूप से सही था)। यहां तक ​​कि जब टाइपस्क्रिप्ट कंपाइलर संकलन त्रुटियों को प्राप्त करता है तब भी यह एक .js फ़ाइल उत्पन्न करेगा। यह .js फ़ाइलों को --allowJs ध्वज के साथ इनपुट के रूप में भी स्वीकार कर सकता है। यह आपको तुरंत टाइपस्क्रिप्ट से शुरू करने की अनुमति देता है। दुर्भाग्यवश संकलन त्रुटियों की शुरुआत में होने की संभावना है। आपको यह याद रखने की ज़रूरत है कि ये शो-स्टॉपिंग त्रुटियां नहीं हैं जैसे कि आप अन्य कंपाइलरों के साथ उपयोग किए जा सकते हैं।

संकलन त्रुटियों को शुरुआत में तब मिलता है जब एक जावास्क्रिप्ट प्रोजेक्ट को टाइपस्क्रिप्ट प्रोजेक्ट में कनवर्ट करना टाइपस्क्रिप्ट की प्रकृति द्वारा अपरिहार्य है। टाइपस्क्रिप्ट वैधता के लिए सभी कोड जांचता है और इस प्रकार इसे उपयोग किए जाने वाले सभी कार्यों और चर के बारे में जानना आवश्यक है। इस प्रकार टाइपिंग की परिभाषा उन सभी के लिए होनी चाहिए अन्यथा संकलन त्रुटियां होने वाली हैं। जैसा कि ऊपर दिए गए अध्याय में बताया गया है, किसी भी जावास्क्रिप्ट ढांचे के लिए .d.ts फ़ाइलें हैं जिन्हें आसानी से कुछ typings install कमांड के साथ अधिग्रहित किया जा सकता है। हालांकि यह हो सकता है कि आपने कुछ अस्पष्ट लाइब्रेरी का उपयोग किया है जिसके लिए कोई टाइपस्क्रिप्ट परिभाषा उपलब्ध नहीं है या आपने कुछ जावास्क्रिप्ट प्राइमेटिव को पॉलीफिल किया है। संकलन त्रुटियों को गायब होने के लिए उस स्थिति में आपको इन बिट्स के लिए टाइप परिभाषाएं प्रदान करनी होंगी। बस एक .d.ts फ़ाइल बनाएं और इसे tsconfig.json की files सरणी में शामिल करें, ताकि इसे हमेशा टाइपस्क्रिप्ट कंपाइलर द्वारा माना जा सके। इसमें उन बिट्स की घोषणा करें जो टाइपस्क्रिप्ट को any प्रकार के बारे में नहीं पता है। एक बार जब आप सभी त्रुटियों को समाप्त कर देते हैं तो आप धीरे-धीरे अपनी आवश्यकताओं के अनुसार उन हिस्सों में टाइपिंग शुरू कर सकते हैं।

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

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

दत्तक ग्रहण

टाइपस्क्रिप्ट ओपन सोर्स (अपाचे 2 लाइसेंस प्राप्त है, जिथब देखें) और माइक्रोसॉफ्ट द्वारा समर्थित है। एंडर्स हेजल्सबर्ग , सी # के मुख्य वास्तुकार इस परियोजना का नेतृत्व कर रहे हैं। यह एक बहुत ही सक्रिय परियोजना है; टाइपस्क्रिप्ट टीम पिछले कुछ सालों में कई नई सुविधाएं जारी कर रही है और बहुत से महान लोगों को अभी भी आने की योजना है ( roadmap देखें)।

2017 में स्टैक ओवरफ्लो डेवलपर सर्वेक्षण टाइपस्क्रिप्ट सबसे लोकप्रिय जावास्क्रिप्ट ट्रांस्लर (9 वां स्थान समग्र) था और सबसे पसंदीदा प्रोग्रामिंग भाषा श्रेणी में तीसरा स्थान जीता।





typescript