टाइपस्क्रिप्ट फ़ाइल में "स्टिक का उपयोग करें" की आवश्यकता है?


126

मैंने टाइपस्क्रिप्ट कोड फ़ाइल में "सख्त उपयोग करें" लाइन को कहां रखा जाए, इसके बारे में पोस्ट देखी है। मेरा सवाल है, यह सब क्यों है?

चूंकि टाइपस्क्रिप्ट पहले से ही एक दृढ़ता से टाइप की गई भाषा है, इसलिए "सख्त का उपयोग करें" क्या जोड़ता है?



12
आपके द्वारा प्रदान किया गया लिंक एक जावास्क्रिप्ट फ़ाइल में "सख्त का उपयोग करें" को परिभाषित करता है। मेरा प्रश्न यह है कि टाइपस्क्रिप्ट फ़ाइल में यह अभी भी उपयोगी है या आवश्यक नहीं है जहाँ टाइपस्क्रिप्ट और टाइपस्क्रिप्ट-सक्षम संपादक उन मुद्दों के अधिकांश / सभी (?) को पकड़ेंगे जो "सख्त उपयोग करते हैं" पकड़ेंगे।
देबोराह

आपको इसकी आवश्यकता भी होगी यदि आप इसे ES6 में बना रहे हैं, तो बैबेल जैसी किसी चीज़ का उपयोग करते हुए, इसमें उत्पन्न स्क्रिप्ट की आवश्यकता होती है"use strict";
ब्रूनोएम

टीएस में दर्ज न करें, tsconfig.json --alwaysStrict में ध्वज जोड़ें: सख्त मोड में पार्स करें और प्रत्येक स्रोत फ़ाइल के लिए "सख्त उपयोग करें" का उत्सर्जन करें
Drenai

जवाबों:


107

अपडेट

  • टाइपस्क्रिप्ट 1.8+: "use strict";मॉड्यूल में उत्सर्जित होता है (और पढ़ें )।
  • टाइपस्क्रिप्ट 2.1+: --alwaysStrictकंपाइलर विकल्प सभी फाइलों को सख्त मोड में पार्स करता है और सभी आउटपुट की गई फाइलों "use strict"के शीर्ष पर (और पढ़ें )।

आप "सख्त मोड में" के लिए टाइपस्क्रिप्ट के परीक्षणों को खोजकर कुछ उदाहरणों की एक सूची पा सकते हैं।

यहां कोड के कुछ उदाहरण दिए गए हैं जो केवल एक संकलन समय त्रुटि को फेंक देंगे जब आप "use strict";:

// future reserved keyword not allowed as variable name
var let,
    yield,
    public,
    private,
    protected,
    static,
    implements;

// "delete" cannot be called on an identifier
var a;
delete a;

// octal literals not allowed
03;

कुछ और उदाहरण हैं जहां "use strict";केवल रनटाइम के दौरान कोई त्रुटि होगी। उदाहरण के लिए:

"use strict";
delete Object.prototype;

व्यक्तिगत रूप से, मुझे यह सब उपयोगी नहीं लगता है जो मुझे टाइपस्क्रिप्ट में गलतियाँ करने से रोकता है और एक फाइल में जो अतिरिक्त शोर जुड़ता है, वह मुझे इसे लिखने में परेशान नहीं करता है। उस ने कहा, टीएस 2.1 में शुरू करने से मैं --alwaysStrictकंपाइलर विकल्प को सक्षम करूंगा क्योंकि यह बिना किसी कोड रखरखाव ओवरहेड के थोड़ी सी अतिरिक्त कठोरता को जोड़ता है।


कूल टाइप करें कि टाइपस्क्रिप्ट यूनिट परीक्षण इसे कवर करते हैं। मैं इसे देख लूँगा। उदाहरण के लिए धन्यवाद। और मैं टाइपस्क्रिप्ट के लिए हमारे "कोडिंग मानकों" में इसे शामिल करने के बारे में सहमत नहीं हूं।
देबोराह

ध्यान दें कि यदि आप बाहरी मॉड्यूल का उपयोग करते हैं, तो use strictTS फ़ाइल के शीर्ष पर घोषित कोई भी स्ट्रिंग फ़ाइल के शीर्ष पर बजाय मॉड्यूल फ़ंक्शन को प्रदर्शित कर सकती है, इस प्रकार शब्दार्थ को थोड़ा बदल देती है।
बिलसी.न.

मेरी मशीन पर, टाइपस्क्रिप्ट 1.4 ईसीएमएस्क्रिप्ट 5 या उच्चतर को लक्षित करते समय ऑक्टिकल शाब्दिक अनुमति नहीं देता है, यहां तक ​​कि उपयोग न करने पर भी"use strict;"
जेरेमी

18

मेरे पैसे के लिए, हां , "use strict";टाइपस्क्रिप्ट फ़ाइलों में शामिल होना चाहिए।

टाइपस्क्रिप्ट पर संकलित समय प्रभावों की उपेक्षा "use strict";, उत्पन्न जावास्क्रिप्ट निष्पादित होने पर रनटाइम प्रभाव होने की संभावना है:

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.