TypeScript 7 کا نیا Go-بنیاد پر مبنی کمپائلر، tsgo، پہلے ہی ESLint، ts-jest اور ts-morph جیسے مقبول ڈویلپمنٹ ٹولز کو خراب کر رہا ہے۔ یہ خرابی تب تک جاری رہے گی جب تک کہ آنے والی 7.1 ریلیز میں کمپائلر کی پروگراماتیک API مستحکم نہیں ہو جاتی، جس کا مطلب ہے کہ جو ٹیمیں ان ٹولز پر انحصار کرتی ہیں انہیں اپ گریڈ کے کسی بھی منصوبے کو روک دینا چاہیے۔

TypeScript 7 میں کیا تبدیل ہوا

اس ریلیز میں tsgo متعارف کرایا گیا ہے، جو کہ ٹائپ چیکر کا ایک Go پورٹ ہے جسے TypeScript ٹیم نے Project Corsa کا کوڈ نیم دیا تھا۔ کور (core) کو JavaScript سے Go پر منتقل کرنے سے کمپائلر دس گنا تک تیز بلڈز فراہم کر سکتا ہے، ایک ایسی سرخی جس نے ان ابتدائی صارفین کو اپنی طرف متوجہ کیا جو CI پائپ لائنز کے وقت کو کم کرنا چاہتے تھے۔

ٹولز کیوں ناکام ہو رہے ہیں

وہ ٹولز جو TypeScript کے ساتھ کام کرتے ہیں وہ براہ راست ٹائپ چیکر سے بات نہیں کرتے۔ وہ اندرونی APIs کا ایک سیٹ کال کرتے ہیں جو ٹائپ کی معلومات، تشخیص (diagnostics) اور AST ٹریورسل (traversal) کو ظاہر کرتے ہیں۔ ان APIs کو tsgo کے لیے دوبارہ لکھا گیا ہے اور ورژن 7.1 تک یہ تبدیلیاں جاری رہیں گی۔ اس کا نتیجہ کریشز اور خاموش ناکامیوں کی صورت میں نکل رہا ہے:

  • typescript-eslint – npm اسے TypeScript 7 کے ساتھ انسٹال کرنے سے انکار کر دیتا ہے؛ زبردستی انسٹال کرنے پر ESLint TypeError دیتا ہے۔
  • ts-jest – ان اندرونی میتھڈز کو کال کرنے کی کوشش کرتا ہے جو Go ورژن میں اب موجود نہیں ہیں، جس کی وجہ سے ٹیسٹ فائل ٹرانسفارمیشن رک جاتی ہے۔
  • ts-morph – کوڈ کے ڈھانچے کو چلانے کے لیے مستحکم API کی توقع کرتا ہے؛ موجودہ API کے ساتھ یہ غلط نتائج دے سکتا ہے یا بغیر کسی وارننگ کے ناکام ہو سکتا ہے۔
  • Monorepos – tsgo کچھ مخصوص جنرک ٹائپ پیرامیٹرز کو چھوڑ دیتا ہے، جس سے ٹائپ کی ایسی غلطیاں پیدا ہوتی ہیں جو صرف بڑے، ملٹی پیکیج پروجیکٹس میں نظر آتی ہیں۔

کوئی بھی ورک فلو جو TypeScript 7 کے ساتھ لنٹنگ (linting)، Jest ٹیسٹنگ یا کوڈ اینالیسس کو ملا کر استعمال کرتا ہے، اس میں غالباً بلڈز فیل (red builds) ہوں گے۔

کون متاثر ہو رہا ہے

  • فرنٹ اینڈ ٹیمیں جو ہر پل ریکوئسٹ (pull request) کے حصے کے طور پر ESLint چلاتی ہیں۔
  • بیک اینڈ سروسز جو یونٹ ٹیسٹنگ کے لیے ts-jest پر انحصار کرتی ہیں۔
  • لائبریریز جو کوڈ جنریشن یا ڈاکومنٹیشن کے لیے 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 کو فریز (freeze) کر دیا جائے گا۔ ایک بار جب یہ آ جائے گی، تو 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 انجن کے کارکردگی کے فوائد بھی حاصل کیے جا سکتے ہیں۔