टाइपस्क्रिप्ट क्या है और मैं जावास्क्रिप्ट के स्थान पर इसका उपयोग क्यों करूंगा? [बन्द है]


1694

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

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


11
इस ब्लॉग को देखें: blogs.msdn.com/b/somasegar/archive/2012/10/01/…
Andreas

यहाँ इस पर कुछ विचार कर रहे हैं: blog.priceandcost.com/development/…
Jefim

जवाबों:


1298

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

1000 फीट का दृश्य ...

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

मेरे कहने का अर्थ यह जानने के लिए कि भाषा पर Microsoft का परिचयात्मक वीडियो देखें

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

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

क्या इसके जैसी अन्य प्रौद्योगिकियां हैं?

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

उदाहरण

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

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()विधि को एक स्ट्रिंग लौटाता है।

टाइपिंग डिबगिंग

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

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

मैंने मूल रूप से यह उत्तर तब लिखा था जब टाइपस्क्रिप्ट अभी भी गर्म-ऑफ-द-प्रेस था। की जाँच करें Lodewijk का जवाब कुछ और वर्तमान विस्तार के लिए इस सवाल का।


103
WebStorm अब टाइपस्क्रिप्ट पर अच्छा इंटेलीसेन प्रदान करता है और मल्टीप्लायर है।
राडेक

26
इन उपकरणों के साथ समस्या यह है कि आपको जावास्क्रिप्ट से पूर्ण प्रदर्शन कभी नहीं मिलता है। हां, यह अच्छी पठनीयता प्रदान करता है लेकिन संकलित कोड कभी-कभी बहुत ही क्लूनी होता है। आप देशी जावास्क्रिप्ट लिखने के लिए एक तृतीय-पक्ष उपकरण पर भरोसा करते हैं, मुझे लगता है कि यह जाने का तरीका नहीं है, यह एक भाषा को दूसरी भाषा में बदलने जैसा है। एक ऐसी भाषा को बदलना चाहते हैं जो किसी अन्य भाषा की तरह व्यवहार करने के लिए दूसरी भाषा न हो, जो मूर्ख और मूर्खतापूर्ण हो। ...... (भाग 1 का अंत) ......
कोडबटन

56
@Erwinus: क्या आपने अभी भी असेंबलर के साथ कार्यक्रम किया था?
VikciaR

11
@Erwinus आप टाइपस्क्रिप्ट कैसे काम करता है, इसके बारे में आप धारणा बना रहे हैं। आप सादे जावास्क्रिप्ट को टाइपस्क्रिप्ट के रूप में लिख सकते हैं और संकलक केवल समय प्रकार की जाँच करने के लिए संकलन करते हैं। ऐसा करने से कोई प्रदर्शन हानि नहीं होती है।
विचारशील

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

1052

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

टाइपस्क्रिप्ट जावास्क्रिप्ट का एक टाइप किया हुआ सुपरसेट है जो सादे जावास्क्रिप्ट के लिए संकलित करता है - typecriptlang.org

जावास्क्रिप्ट एक प्रोग्रामिंग भाषा है जिसे EMCA की तकनीकी समिति 39 द्वारा विकसित किया गया है , जो कई अलग-अलग हितधारकों से बने लोगों का एक समूह है। TC39 ECMA द्वारा होस्ट की गई एक समिति है : एक आंतरिक मानक संगठन। कई अलग-अलग विक्रेताओं (जैसे Google, Microsoft, Oracle, आदि) द्वारा जावास्क्रिप्ट के कई अलग-अलग कार्यान्वयन हैं। जावास्क्रिप्ट का लक्ष्य वेब का लिंगुआ फ्रेंका होना है।

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

अनिवार्य रूप से टाइपस्क्रिप्ट तीन तरीकों से अपने लक्ष्यों को प्राप्त करता है:

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

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

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

टाइपस्क्रिप्ट का अन्य जावास्क्रिप्ट लक्षित भाषाओं से संबंध है

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

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

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

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

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

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

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

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

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

सकारात्मक गुणांक वाले उन लोगों के लिए हम उम्मीद कर सकते हैं कि भाषा से जुड़े हुए हैं, क्रेटरिस पेरिबस, अधिक से अधिक दोषों को ठीक करता है। इन भाषाओं में C, C ++, JavaScript , Objective-C, Php और Python शामिल हैं। क्लीजुर , हास्केल, रूबी, स्काला और टाइपस्क्रिप्ट सभी भाषाओं में नकारात्मक गुणांक हैं, जिसका अर्थ है कि इन भाषाओं के औसत में दोषों को ठीक करने की तुलना में कम संभावना है।

बढ़ी हुई आईडीई सहायता

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

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

सख्त अशक्त जाँच

जावास्क्रिप्ट के रूप में बग की वजह से फॉर्म की रनटाइम त्रुटियाँ बहुत अधिक हैं 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:।

एक बार एक प्रकार अशक्त होने के लिए जाना जाता है, जिसका अर्थ है कि यह एक प्रकार का है जो मूल्य का भी हो सकता है 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 कॉन्फ्रेंस के टाइप-डिज़ाइनर एंडर्स हेज़ेल्सबर्ग के सह-डिज़ाइनर ने इस सुविधा का विस्तृत विवरण और प्रदर्शन दिया: वीडियो (44:30 से 56:30 तक)।

संकलन

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

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

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

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

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

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

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

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

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

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

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

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

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

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

सबसे बड़ी बाधा सीखने की अवस्था है। मैं आपको पहली बार में एक छोटी परियोजना के साथ खेलने के लिए प्रोत्साहित करता हूं। यह देखें कि यह कैसे काम करता है, यह कैसे बनता है, यह किस फाइल का उपयोग करता है, यह कैसे कॉन्फ़िगर किया गया है, यह आपके आईडीई में कैसे कार्य करता है, यह कैसे संरचित है, कौन से टूल का उपयोग करता है, आदि टाइपस्क्रिप्ट के लिए एक बड़े जावास्क्रिप्ट कोडबेस को बदलना जब वे जानते हैं तो यह उल्लेखनीय है। तुम क्या कर रहे हो। उदाहरण के लिए इस ब्लॉग को 72 घंटों में 600k लाइनों को टाइपस्क्रिप्ट में परिवर्तित करने पर पढ़ें )। जंप करने से पहले भाषा को अच्छी तरह समझ लें।

दत्तक ग्रहण

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

गोद लेने और लोकप्रियता के बारे में कुछ तथ्य:

  • में 2017 StackOverflow डेवलपर सर्वेक्षण टाइपप्रति (कुल 9 वां स्थान) सबसे लोकप्रिय जावास्क्रिप्ट transpiler था और सबसे प्यार करता था प्रोग्रामिंग भाषा श्रेणी में तीसरा स्थान जीता।
  • में js के 2018 राज्य सर्वेक्षण टाइपप्रति जावास्क्रिप्ट जायके श्रेणी में दो बड़े विजेताओं में से एक के रूप में घोषित किया गया था (ES6 अन्य बताते हैं)।
  • में 2019 StackOverlow deverloper सर्वेक्षण टाइपप्रति पेशेवर डेवलपर्स के बीच सबसे लोकप्रिय भाषाओं के 9 वें स्थान पर पहुंच गए दोनों C और C ++ पर हावी हो। यह सबसे अधिक पसंद की जाने वाली भाषाओं में फिर से तीसरे स्थान पर रहा।

25
"जावास्क्रिप्ट कोड वैध टाइपस्क्रिप्ट कोड है" - यह वास्तव में हमेशा सच नहीं होता है। मेरा मतलब है जैसे कि कोड (1 === '1') {} आपको TS में त्रुटि देता है और JS में नहीं। लेकिन ज्यादातर समय, अगर जेएस कोड अच्छी तरह से लिखा गया है तो यह सच है।
मैकीज बुकोव्स्की

3
यदि आपने अपना अनमोल उत्पादक समय खो दिया है एक लापता अर्ध उपनिवेश के ऊपर झल्लाहट, टाइपस्क्रिप्ट में लिखना एक जीवन रक्षक होगा।
सोफी सूफ़ी

3
टंकण को ​​हटा दिया गया है, और वर्तमान सर्वोत्तम प्रथा सिर्फ npm(या yarn) है install @types/foo। क्या आप अपना जवाब अपडेट कर सकते हैं?
जेड फॉक्स

13
टीएल; डीआर इस उत्तर में सुरक्षित होगा;)
क्यूबैक

8
@MaciejBukowski भले ही टाइपस्क्रिप्ट वास्तव में इस मामले में शिकायत करता है, फिर भी आपको एक वैध जेएस आउटपुट मिलता है (जो जेएस कोड होगा जिसे आपने टाइपस्क्रिप्ट के साथ संकलित / ट्रांसप्ले किया है)। तो यह एक "त्रुटि के साथ संकलन" है, और अमान्य टाइपस्क्रिप्ट नहीं । यह टाइपस्क्रिप्ट विनिर्देश में नीचे लिखा गया है कि कोई भी मान्य जेएस कोड वैध टीएस कोड होना चाहिए।
पचं ०

83

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

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


4
बेस्ट टीएल; डीआर टीएस का पेज है: "टाइपस्क्रिप्ट जावास्क्रिप्ट का एक टाइप किया हुआ सुपरसेट है जो सादे जावास्क्रिप्ट को संकलित करता है।"
जुआन मेंडेस

1
हालांकि यह "मुझे इसका उपयोग क्यों करना चाहिए" का जवाब नहीं है। यहाँ tl; dr होगा: 1) जावास्क्रिप्ट के लिए वैकल्पिक स्थिर प्रकार जोड़ने के लिए। प्रकार संकलित समय पर बग्स को पकड़ने में मदद कर सकते हैं और आपके कार्यक्रम को बेहतर बना सकते हैं। 2) आप नए जावास्क्रिप्ट (ES6 / ES7 / ESnext) लिख सकते हैं और इसे वापस ES5 पर संकलित कर सकते हैं, जो पुराने ब्राउज़रों का समर्थन करने के लिए आवश्यक है; मैंने tsmean.com/articles/vs/typescript-vs-javascript पर tl से अधिक रुचि रखने वालों के लिए थोड़ा और विस्तृत किया है ; dr
bersling

1
"ट्रांसप्लड कोड जेएस मान्य होगा" - और यदि आप मुझसे पूछते हैं तो टाइपस्क्रिप्ट्स एच्लीस हील है। इसका मतलब है कि वे जेएस में कई बहुत उपयोगी सुविधाएँ नहीं जोड़ सकते हैं; सबसे विशेष रूप से क्रम प्रकार की जाँच। कंपाइलर-टाइम टाइप सेफ्टी के लिए इसे थोडा परेशान करना केवल I / O से पढ़े जाने वाले किसी भी रनटाइम डेटा के लिए इसे खोना है, या किसी भी समय आपके ट्रांसकोड किए गए कोड को अन्य JS से अनसैचली कहा जाता है।
Jez

44

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

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

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


9
SDLC क्या हैं? एएमडी?
ओउगी

15
@ वूगी, एसडीएलसी == सॉफ्टवेयर डेवलपमेंट लाइफ साइकिल। AMD == एसिंक्रोनस मॉड्यूल परिभाषा। उत्तरार्द्ध जावास्क्रिप्ट के लिए विशिष्ट है, जबकि पूर्व गुंजाइश में सामान्य है।

2
"एएमडी को लागू करने में आसानी, ..." - मैंने पढ़ा और सोचा कि यह किसी प्रकार का थ्रेडिपर अनुकूलन या कुछ है।
jrh

15

एक्मा स्क्रिप्ट 5 (ईएस 5) जो सभी ब्राउज़र का समर्थन करता है और पूर्वनिर्धारित करता है। ES6 / ES2015 और ES / 2016 इस साल बहुत सारे बदलावों के साथ आए, ताकि इन परिवर्तनों को पॉप करने के लिए बीच में कुछ ऐसा हो, जिससे टाइपस्क्रिप्ट के बारे में परवाह की जाए।

• टाइपस्क्रिप्ट प्रकार है -> इसका मतलब है कि हमें प्रत्येक संपत्ति और विधियों के डेटाटाइप को परिभाषित करना होगा। यदि आप C # जानते हैं तो टाइपस्क्रिप्ट को समझना आसान है।

टाइपस्क्रिप्ट का बड़ा फायदा यह है कि हम उत्पादन से पहले जल्दी से संबंधित प्रकारों की पहचान कर लेते हैं। यह किसी भी प्रकार के बेमेल होने पर यूनिट परीक्षणों को विफल करने की अनुमति देता है।


2
यह हर साल दोस्त नहीं है! .. उन्होंने बहुत लंबे इंतजार के बाद कल्पना बदल दी है
सुभम त्रिपाठी

... और, वे परिवर्तन जिन्हें आप Microsoft के साथ सहसंबद्ध कर सकते हैं, उसमें अपनी अंगुलियाँ प्राप्त कर सकते हैं। ;-)
ट्रोब

2
@ शुभम त्रिपाठी यह हर साल बहुत होता है । ES2015, ES2016, ES2017, और अब से जब तक भाषा मर जाती है। यह 2015 से पहले हर साल नहीं था , लेकिन अब है। अधिक जानने के लिए "TC39 प्रक्रिया" की खोज करें।
डेमोनएक्समैचिना

1
जावास्क्रिप्ट समुदाय में प्रकार की जाँच के लिए एक बड़ी मांग थी? मेरे पास अभी तक कई प्रकार की जाँच से संबंधित कीड़े नहीं हैं।
बॉक्स और कॉक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.