टाइपस्क्रिप्ट कंपाइलर त्रुटि के बावजूद मेरा रिएक्ट नेटिव ऐप सफलतापूर्वक क्यों बनता है?


15

मैंने हाल ही में एक्सपो के साथ टाइपस्क्रिप्ट का उपयोग शुरू किया है। मैंने सभी लिंटर / फॉर्मैटर इंटीग्रेशन किए हैं, जैसे typescript-eslintमैं कोडिंग के दौरान अधिकांश त्रुटियों को पकड़ सकता हूं। यह जाँचने के लिए कि क्या कोड संकलित है, मैं npx tscहर एक बार एक बार चलाता हूं और तदनुसार ठीक करता हूं ।

एक चीज जो मैंने अभी तक पूरी तरह से समझ नहीं पाई है, वह यह है कि जब कई कंपाइल एरर होते हैं तो भी मेरा ऐप सफलतापूर्वक कैसे बनता है। मैं उम्मीद करता हूं (और पसंद करता हूं) ऐप के सफलतापूर्वक निर्माण के बजाय प्रत्येक संकलित त्रुटि के लिए एक लाल स्क्रीन त्रुटि देखने के लिए और मुझे बाद में पता चला। उदाहरण के लिए,

function square<T>(x: T): T {
  console.log(x.length); // error TS2339: Property 'length' does not exist on type 'T'.
  return x * x;
}

एक सामान्य टाइपस्क्रिप्ट त्रुटि है (मुझे विश्वास है?) संकलन समय पर आसानी से जांची जा सकती है। मैं चाहता हूं कि इसका परिणाम एक बड़ी लाल स्क्रीन त्रुटि और निर्माण में विफल हो।

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


"सफलतापूर्वक बनाता है" से आपका मतलब है कि जेएस वैसे भी आउटपुट है, या कुछ बिंदु पर कोई संकलक त्रुटि संदेश नहीं दिखाया गया है?
ecraig12345

2
मेरा मतलब है कि जेएस आउटपुट वैसे भी है और मैं ऐप को देव मोड में चला सकता हूं और बिना किसी समस्या के प्रोडक्शन ऐप भी बना सकता हूं। मुझे उम्मीद है कि टाइपस्क्रिप्ट को संकलन के समय इसे रोका जाएगा। कंपाइलर त्रुटि संदेश हमेशा जब मैं चलाता हूं तो दिखाया जाता है npx tscलेकिन मैं हर टाइपस्क्रिप्ट त्रुटि के लिए एक लाल स्क्रीन प्राप्त करना चाहता हूं जैसे const n = 23; n.reverse();कि मैं सामान्य जेएस त्रुटियों के लिए करता हूं जैसे कि संदेश के साथ लाल स्क्रीन में परिणाम "n.reverse एक फ़ंक्शन नहीं है।" (में 'n.reverse ()', 'n.reverse' अपरिभाषित है) "
अनार

2
मुझे यह इतना अजीब लगता है। मुझे इसका पर्याप्त समाधान भी नहीं मिल रहा है।
साइमन बेंग्सटन

जवाबों:


2

समझने वाली पहली बात यह है कि टाइपस्क्रिप्ट जावास्क्रिप्ट का एक सुपरसेट है, और इस मामले में यह वास्तव में संकलन के दौरान प्रकार की जांच नहीं करता है।

अनिवार्य रूप से क्या होता है बैबेल सिर्फ टाइपस्क्रिप्ट को स्ट्रिप्स करता है और इसे जावास्क्रिप्ट में परिवर्तित करता है, जो फिर जेएस बंडल में संकलित हो जाता है।

आप निम्नलिखित बैबल डॉक्स की पहली पंक्ति के साथ-साथ केवेट्स पर एक नज़र डाल सकते हैं: https://babeljs.io/docs/en/next/babel-plugin-transform-typescript

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

मैं जो सुझाव tscदूंगा वह आपकी बिल्ड कमांड को पहले शामिल करने या इसके बजाय टाइपस्क्रिप्ट संकलन को विस्तारित noEmitकरने के लिए है, जो आपके tsconfig में सही पर सेट है।

अद्यतन : मुझे एक और उदाहरण मिला जहां यह हाल ही में एक परियोजना में जोड़ते समय jestऔर लागू होता है typescript। जेस्ट डॉक्स के तल पर वे वास्तव में एक ही बात कहते हैं:

https://jestjs.io/docs/en/getting-started#using-typescript

हालाँकि, Babel के साथ TypeScript का उपयोग करने के लिए कुछ चेतावनी हैं। क्योंकि बाबेल में टाइपस्क्रिप्ट समर्थन ट्रांसप्लिकेशन है, जेस्ट आपके परीक्षणों को टाइप नहीं करेगा जैसा कि वे चलाया जाता है। यदि आप ऐसा चाहते हैं, तो आप ts-jest का उपयोग कर सकते हैं।

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