TypeScript 7 चा नवीन Go-आधारित कंपायलर, tsgo, ESLint, ts-jest आणि ts-morph सारखी लोकप्रिय डेव्हलपमेंट टूल्स आधीच बिघडवत आहे. जोपर्यंत आगामी 7.1 रिलीजमध्ये कंपायलरचा प्रोग्रामॅटिक API स्थिर होत नाही, तोपर्यंत ही समस्या सुरू राहील, याचा अर्थ असा की या टूल्सवर अवलंबून असलेल्या टीम्सनी त्यांच्या अपग्रेड प्लॅन्सवर सध्या स्थगिती द्यावी.

TypeScript 7 मध्ये काय बदलले आहे

या रिलीजमध्ये tsgo सादर करण्यात आले आहे, जे टाइप-चेकरचे Go पोर्ट आहे आणि ज्याला TypeScript टीमने Project Corsa असे कोडनेम दिले आहे. कोअर (core) JavaScript कडून Go कडे हलवल्यामुळे, कंपायलर दहा पटीने वेगाने बिल्ड्स देऊ शकतो, ही एक अशी बातमी आहे ज्याने CI पाइपलाइन्सचा वेळ वाचवू इच्छिणाऱ्या सुरुवातीच्या वापरकर्त्यांना आकर्षित केले आहे.

टूल्स का फेल होत आहेत

TypeScript सोबत काम करणारी टूल्स थेट टाइप-चेकरशी संवाद साधत नाहीत. ती टाइप माहिती, डायग्नोस्टिक्स आणि AST ट्रॅव्हर्सल (traversal) उघड करणाऱ्या अंतर्गत (internal) APIs च्या संचाला कॉल करतात. ते APIs tsgo साठी पुन्हा लिहिले गेले आहेत आणि व्हर्जन 7.1 पर्यंत ते बदलत राहतील. याचा परिणाम क्रॅश आणि सायलेंट फेल्युअरच्या (silent failures) साखळीत होतो:

  • typescript-eslint – npm हे TypeScript 7 सोबत इंस्टॉल करण्यास नकार देते; जबरदस्तीने इंस्टॉल केल्यास ESLint TypeError दर्शवते.
  • ts-jest – अशा अंतर्गत मेथड्स कॉल करण्याचा प्रयत्न करते ज्या Go व्हर्जनमध्ये आता अस्तित्वात नाहीत, ज्यामुळे टेस्ट-फाईल ट्रान्सफॉर्मेशन थांबते.
  • ts-morph – कोड स्ट्रक्चर तपासण्यासाठी स्थिर API ची अपेक्षा करते; सध्याच्या API सह ते चुकीचे निकाल देऊ शकते किंवा कोणत्याही चेतावणीशिवाय फेल होऊ शकते.
  • Monorepostsgo काही जेनेरिक टाइप पॅरामीटर्स काढून टाकते, ज्यामुळे मोठ्या, मल्टी-पॅकेज प्रोजेक्ट्समध्ये फक्त टाइप एरर्स दिसून येतात.

कोणत्याही वर्कफ्लोमध्ये (workflow) लिनटिंग, Jest टेस्टिंग किंवा कोड-ॲनालिसिस TypeScript 7 सोबत मिक्स केल्यास बहुधा 'red builds' पाहायला मिळतील.

कोणावर परिणाम होत आहे

  • Front-end टीम्स ज्या प्रत्येक पुल रिक्वेस्टचा (pull request) भाग म्हणून ESLint चालवतात.
  • Back-end सर्व्हिसेस ज्या युनिट टेस्टिंगसाठी ts-jest वर अवलंबून आहेत.
  • Libraries ज्या कोड जनरेशन किंवा डॉक्युमेंटेशनसाठी ts-morph वापरतात.
  • Monorepo सेटअप असलेल्या संस्था जिथे टाइप इन्फरन्स (type inference) आधीच क्लिष्ट आहे.

जर तुमच्या TypeScript अपग्रेडनंतर तुमची CI पाइपलाइन 'red' झाली असेल, तर त्याचे कारण वरीलपैकी एक असू शकते.

7.1 पर्यंत सुरक्षित मायग्रेशन मार्ग

टूल्स न बिघडवता वेगाचा फायदा मिळवण्याचा सर्वात सोपा मार्ग म्हणजे वेगवान टाइप-चेकिंग स्टेपला प्रत्यक्ष बिल्डपासून वेगळे करणे:

  1. मुख्य TypeScript व्हर्जन 6.x वर पिन करा – यामुळे सर्व टूल्स अपेक्षित असलेला स्थिर API कायम राहतो.
  2. @typescript/native-preview ला dev dependency म्हणून जोडा – हे पॅकेज CI मध्ये जलद टाइप-चेकिंगसाठी tsgo बायनरी प्रदान करते.
  3. जलद तपासणीसाठी --noEmit सह tsgo चालवा – हे टाइप्स व्हॅलिडेट करते परंतु आउटपुट फाइल्स तयार करत नाही.
  4. प्रत्यक्ष बिल्ड्ससाठी क्लासिक tsc कंपायलर वापराtsc अजूनही JavaScript तयार करते आणि 6.x API चे पालन करते.
npm install -D typescript@^6.9
npm install -D @typescript/native-preview

तुमचे package.json स्क्रिप्ट्स अपडेट करा:

{
  "scripts": {
    "typecheck:fast": "tsgo --noEmit",
    "build": "tsc"
  }
}

या दुहेरी सेटअपमुळे तुम्ही ESLint, ts-jest आणि ts-morph सोबत सुसंगतता राखून CI मध्ये दहा पटीने वेगाचा फायदा मिळवू शकता.

तुम्ही थेट 7.0 वर कधी अपग्रेड करू शकता

जर तुमचा कोडबेस फक्त tsc कॉल करत असेल—लिनटिंग, Jest किंवा ts-morph नसेल—तर अस्थिर API तुम्हाला प्रभावित करणार नाही. अशा मर्यादित परिस्थितीत तुम्ही त्वरित TypeScript 7 वर जाऊ शकता आणि अतिरिक्त पायऱ्यांशिवाय परफॉर्मन्सचा फायदा घेऊ शकता.

काय लक्ष ठेवायचे आहे

  • व्हर्जन 7.1 – TypeScript टीमने संकेत दिले आहेत की या रिलीजमध्ये प्रोग्रामॅटिक API स्थिर (frozen) केला जाईल. एकदा तो उपलब्ध झाला की, tsgo आणि विद्यमान टूलिंगमधील दुवा निघून जाईल, ज्यामुळे स्वच्छ अपग्रेड करणे शक्य होईल.
  • टूलिंग अपडेट्सtypescript-eslint, ts-jest आणि ts-morph च्या नवीन रिलीजवर लक्ष ठेवा. 7.1 रिलीज झाल्यानंतर लवकरच ते सुसंगत व्हर्जन प्रकाशित करतील.
  • CI कॉन्फिगरेशन – एकदा API स्थिर झाला की tsgo --noEmit च्या जागी नियमित tsc कॉल करायला विसरू नका; त्यानंतर प्रिव्ह्यू पॅकेजची गरज भासणार नाही.

थोडक्यात सांगायचे तर: 7.1 API लॉक-इन होईपर्यंत, तुमच्या मुख्य कंपायलरसाठी TypeScript 6.x वर राहा, जलद तपासणीसाठी @typescript/native-preview जोडा आणि बिल्ड्ससाठी tsc वापरणे सुरू ठेवा. यामुळे नवीन Go इंजिनचे परफॉर्मन्स फायदे मिळवत असतानाच लिनटिंग आणि टेस्टिंगमध्ये येणारे अडथळे टाळता येतील.