स्टैटिक विश्लेषण

स्टैटिक विश्लेषण एक तरह की टेस्टिंग है, जिससे आपकी कोड को चलाने या ऑटोमेटेड टेस्ट लिखने की ज़रूरत नहीं है. आपने यदि आप VSCode जैसे IDE का उपयोग करते हैं—तो हो सकता है कि आप इस प्रकार का परीक्षण पहले ही देख लें TypeScript के ज़रिए की गई जांच एक तरह का स्थिर विश्लेषण है और यह गड़बड़ियों या चेतावनियों के नीचे टेढ़ी-मेढ़ी लाइनें दिखती हैं.

ESLint एक ऐसा टूल है, जो आपके कोड बेस में एक्सपोर्ट करें. ये समस्याएं किसी तरह की सुरक्षित हो सकती हैं,लेकिन इसमें गड़बड़ियां या स्टैंडर्ड नियम का पालन नहीं होता है डेटा पर पाबंदी लगाई है. ESLint की मदद से, ऐसे कई नियम लागू किए जा सकते हैं जिन पर सही का निशान लगा हो आपका कोड बेस, जिसमें इसके "सुझाए गए" कई कोड शामिल हैं सेट.

ईएसएलंट नियम का सबसे अच्छा उदाहरण यह है कि no-unsafe-finally नियम. यह आपको ऐसे वक्तव्य लिखने से रोकता है जो आपके प्रोग्राम को संशोधित करते हैं finally ब्लॉक में कंट्रोल फ़्लो. यह एक उत्तम नियम है, क्योंकि ऐसा करने से JavaScript को लिखने का एक असामान्य तरीका है, जिसे फ़ॉलो करना मुश्किल हो सकता है. हालांकि, यह एक सही कोड समीक्षा प्रोसेस की मदद से, उसका पता लगाया जा सकता है.

  try {
    const result = await complexFetchFromNetwork();
    if (!result.ok) {
      throw new Error("failed to fetch");
    }
  } finally {
    // warning - this will 'overrule' the previous exception!
    return false;
  }

इसलिए, ESLint अच्छी समीक्षा की जगह नहीं ले सकता. यह एक ऐसी स्टाइल है जिसमें गाइड की मदद से यह तय करता है कि आपका कोडबेस कैसा दिखना चाहिए, क्योंकि यह हर उस असामान्य तरीका को कैप्चर किया जा सकता है जिसे कोई डेवलपर लागू करने की कोशिश कर सकता है में शामिल हो सकते हैं. Google की इंजीनियरिंग से जुड़ी प्रक्रियाओं की गाइड में, "इसे आसान बनाए रखने" के बारे में एक छोटा सेक्शन दिया गया है.

ESLint आपको किसी नियम को तोड़ने और कोड को "अनुमति है" के तौर पर एनोटेट करने की सुविधा देता है. उदाहरण के लिए, आपके पिछले लॉजिक को अनुमति देने के लिए, ऐसा इस तरह से जानकारी दे सकता है:

  finally {
    // eslint-disable-next-line no-unsafe-finally
    return false;
  }

अगर आपको किसी नियम का बार-बार उल्लंघन होता है, तो उसे बंद कर दें. ये ये टूल आपको एक खास तरीके से कोड लिखने के लिए बढ़ावा देते हैं. हालांकि, आपकी टीम का इस्तेमाल अलग तरीके से कोड लिखने और इसके जोखिमों के बारे में पहले से ही वाकया है अप्रोच का इस्तेमाल करें.

आखिर में, बड़े कोड बेस पर स्टैटिक विश्लेषण टूल चालू करने से, की वजह से काम का नहीं हो रहा है. ठीक है. इसलिए, किसी प्रोजेक्ट के लाइफ़साइकल की शुरुआत में इसे चालू करना आसान होता है.

ब्राउज़र से जुड़ी सहायता के लिए ESLint प्लगिन

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

स्टैटिक विश्लेषण के लिए टाइप चेकिंग

आम तौर पर, JavaScript को सीखते समय, नए डेवलपर को इस आइडिया के बारे में पता चलता है कि यह एक कमज़ोर टाइप की गई भाषा है. इसका मतलब यह किया जा सकता है कि का उपयोग करें, तो किसी चीज़ के लिए पूरी तरह उसी स्थान का उपयोग करें अलग हैं. यह Python और स्क्रिप्टिंग वाली अन्य लैंग्वेज की तरह ही है. हालांकि, यह Python वर्शन से बिलकुल अलग है C/C++ और Rust जैसी कंपाइल की गई भाषाएं.

इस तरह की भाषा शुरुआत करने के लिए अच्छी हो सकती है—और यकीनन यह सरलता ने JavaScript को इतनी लोकप्रिय बना दिया है—लेकिन अक्सर यह गलती का कारण होता है या कम से कम कुछ ऐसा जो भ्रम की स्थिति पैदा करने वाली गड़बड़ियों को होता है. उदाहरण के लिए, number को पास करके, जहां string या कोई ऑब्जेक्ट टाइप हो उम्मीद थी, कि गलत तरीके से टाइप किया गया मान अलग-अलग TypeError को पहचानने में मदद मिलेगी.

TypeScript

टाइपस्क्रिप्ट, JavaScript की टाइपिंग की कमी का सबसे सामान्य समाधान है जानकारी. इस कोर्स में इसका भरपूर इस्तेमाल किया गया है. यह कोई कोर्स नहीं है TypeScript, तो यह आपके टूलबॉक्स का एक महत्वपूर्ण हिस्सा हो सकता है क्योंकि यह स्टैटिक विश्लेषण.

उदाहरण के लिए, यह कोड, जिसे string नाम और number उम्र:

const callback = (name: string, age: string): void => {
  console.info(name, 'is now', age, 'years old!');
};
onBirthday(callback);

TypeScript के ज़रिए चलाए जाने पर या कर्सर घुमाने पर भी, नीचे दी गई गड़बड़ी जनरेट करता है IDE में:

bad.ts:4:12 - error TS2345: Argument of type '(name: string, age: string) => void' is not assignable to parameter of type '(name: string, age: number) => void'.
  Types of parameters 'age' and 'age' are incompatible.
    Type 'number' is not assignable to type 'string'.

4 onBirthday(callback);
             ~~~~~~~~

Found 1 error in bad.ts:4
कोड से
  पिछला उदाहरण, किसी IDE में दिखाया गया है और उसके गड़बड़ी के मैसेज में
  पॉप-अप.
VSCode से पता चलता है कि आपने गलत अनुरोध किया है टाइप करें.

टाइपस्क्रिप्ट को इस्तेमाल करने का मकसद इस तरह की गड़बड़ियों को रोकना है— उम्र, number होनी चाहिए, न कि string—जो आपके प्रोजेक्ट में लगातार है. यह अन्य तरह के टेस्ट का इस्तेमाल करके गड़बड़ी का पता लगाना मुश्किल हो सकता है. इसके अलावा, टेस्ट शुरू होने से पहले ही टाइप सिस्टम आपको सुझाव दे सकता है. इससे आपको शुरुआत में ही सुझाव या राय देकर, कोड लिखने की प्रक्रिया को आसान बनाया जा सकता है के बारे में नहीं, बल्कि कोड को कोड में बदलने के दौरान चला जाता है.

TypeScript का इस्तेमाल करने का सबसे चुनौती भरा हिस्सा उसे सही तरीके से सेट अप करना है. कई प्रोजेक्ट के लिए tsconfig.json फ़ाइल की ज़रूरत होती है, जिसका इस्तेमाल मुख्य तौर पर tsc करता है कमांड-लाइन टूल को ही, VSCode जैसे कई अन्य जिसमें Vitest शामिल है. इस फ़ाइल में सैकड़ों विकल्पों और फ़्लैग का इस्तेमाल कर सकते हैं. साथ ही, इन्हें सेट अप करने के कुछ अच्छे संसाधन आपको यहां मिल सकते हैं:

TypeScript से जुड़ी सामान्य सलाह

किसी tsconfig.json फ़ाइल की मदद से TypeScript को सेट अप और इस्तेमाल करते समय, इन बातों का ध्यान रखें:

  • पक्का करें कि आपकी सोर्स फ़ाइलें शामिल की गई हों और उनकी जांच की गई हो. अगर कोई फ़ाइल रहस्यमयी तरीके से "कोई गड़बड़ी नहीं है", ऐसा शायद इसलिए है, क्योंकि उसकी जांच नहीं की जा रही है.
  • .d.ts फ़ाइलों में, टाइप और इंटरफ़ेस के बारे में साफ़ तौर पर बताना फ़ंक्शन लिखते समय उन्हें अस्पष्ट रूप से वर्णन करके, आपके कोड बेस की जांच करना आसान है. मॉक और 'नकली' लिखना आसान है के वर्शन कोड तब, जब उसमें शामिल इंटरफ़ेस साफ़ तौर पर समझ में आ रहे हों. .

TypeScript इंप्लिसिट कोई भी

TypeScript के सबसे ताकतवर और फ़ायदेमंद कॉन्फ़िगरेशन में से एक है noImplicitAny फ़्लैग. हालांकि, इसे चालू करना अक्सर सबसे मुश्किल भी होता है, खासकर तब, जब आपके पास पहले से ही एक बड़ा कोड बेस हो. (noImplicitAny का फ़्लैग यह है डिफ़ॉल्ट रूप से चालू रहती है. ऐसा तब होता है, जब आप strict मोड में हों, लेकिन दूसरे मोड में नहीं.)

यह फ़्लैग इस फ़ंक्शन को गड़बड़ी दिखाएगा:

export function fibonacci(n) {
  if (n <= 1) {
    return 0;
  } else if (n === 2) {
    return 1;
  }
  return fibonacci(n - 1) + fibonacci(n - 2);
}

हालांकि, एक पाठक के तौर पर, यह साफ़ तौर पर पता है कि n एक संख्या होनी चाहिए, TypeScript इसकी पुष्टि नहीं कर सकता. यदि आप VSCode का उपयोग कर रहे हैं, तो फ़ंक्शन इसका ब्यौरा इस तरह देगा:

function fibonacci(n: any): any

इस फ़ंक्शन के कॉलर, any टाइप की वैल्यू पास कर पाएंगे (एक ऐसा टाइप जो किसी भी तरह के डेटा की अनुमति देता है), न कि सिर्फ़ number. यह सुविधा चालू करके noImplicitAny फ़्लैग, आप डेवलपमेंट के दौरान इस तरह के कोड को सुरक्षित रख सकते हैं, कोड पास करने के लिए, बड़े पैमाने पर बिज़नेस लॉजिक टेस्ट लिखने की ज़रूरत नहीं है में गलत डेटा टाइप को छिपा देता है.

यहां सबसे आसान तरीका यह है कि n आर्ग्युमेंट और fibonacci के रिटर्न टाइप, दोनों को number के तौर पर मार्क किया जाए.

noImplicitAny फ़्लैग आपको any को साफ़ तौर पर लिखने से नहीं रोकता है आपका कोड बेस. अब भी ऐसा फ़ंक्शन लिखा जा सकता है जो स्वीकार करता हो या लौटाए any टाइप. इससे यह पक्का होता है कि आप हर वैरिएबल को एक टाइप दें.