TypeScript 7 با قابلیت «isolated declarations» عرضه شد؛ یک حالت کامپایلر که به monorepoهای بزرگ اجازه میدهد فایلها را بهصورت موازی کامپایل کنند و حلقههای بازخورد توسعهدهندگان را سرعت میبخشد.
چرا isolated declarations اکنون اهمیت دارند
تا پیش از این نسخه، کامپایلر TypeScript فایلهای اعلان (.d.ts) را در یک تکرشته (single thread) پردازش میکرد. در پایگاههای کدی که شامل صدها پکیج هستند، این مرحله اغلب باعث کندی کل خط لوله ساخت (build pipeline) میشد. با تقسیم کارِ بررسی نوع (type-checking) بین هستههای مختلف، isolated declarations زمان ساخت را برای تیمهایی که تمام کتابخانههای خود را در یک مخزن (repository) نگه میدارند، به شدت کاهش میدهد.
تأثیر این ویژگی برای هر سازمانی که وظایف CI را اجرا میکند یا به بازسازیهای محلی (local rebuilds) سریع نیاز دارد، بلافاصله احساس خواهد شد.
مسیر رسیدن به بررسی نوع موازی
مایکروسافت سالها پیش قابلیت کامپایل افزایشی (incremental compilation) را اضافه کرد، اما مرحله اعلان به دلیل وابستگی فایلها به یکدیگر، به صورت متوالی باقی ماند. با بزرگتر شدن monorepoها، این مرحله تکرشتهای به یک گلوگاه پرهزینه تبدیل شد. isolated declarations زنجیره وابستگی را میشکند، با سطح عمومی (public surface) هر فایل را به عنوان یک واحد مستقل در نظر میگیرد و آنها را بهطور همزمان اعتبارسنجی میکند.
چه کسانی سود میبرند و چه کسانی نه
- تیمهای توسعه با monorepoهای بزرگ – بیشترین کاهش در زمان ساخت را تجربه میکنند، بهویژه در عوامل CI با چندین هسته CPU.
- پروژههای کوچک یا اپلیکیشنهای تکپکیجی – ممکن است تنها بهبود اندکی را مشاهده کنند، زیرا مرحله اعلان در حال حاضر بخش بسیار کوچکی از کل زمان کامپایل را مصرف میکند.
- تیمهای دارای سختافزار محدود – به همان دلیل، بهبود جزئی مشابهی خواهند داشت.
انتشار گستردهتر TypeScript 7
isolated declarations همراه با مجموعهای از ارتقاهای متمرکز بر ایمنی عرضه میشود:
- اصلاحات حالت سختگیرانه (Strict mode) – بررسیهای جدیدی مانند
strictIndexSignaturesزمانی که کد به یک کلید شیء که احتمالاً وجود ندارد دسترسی پیدا میکند، هشدار میدهند. - عناصر نامگذاریشدهی tuple – توسعهدهندگان میتوانند موقعیتهای tuple را برچسبگذاری کنند و امضاهای API را خود-مستند (self-documenting) کنند.
- عملگر ارتقایافتهی
satisfies– مدیریت بهتر جنریکهای پیچیده، استنتاج نوع (type inference) را بدون از دست دادن خوانایی بهبود میبخشد. - انتشار بافت نامتقارن (Async context propagation) – پشتیبانی از AsyncContext API به ردیابی پشتههای فراخوانی ناهمگام (asynchronous call stacks) کمک میکند.
- متادیتای دکوراتور (Decorator metadata) – پیشنهاد TC39 به کد در زمان اجرا اجازه میدهد تا دکوراتورهای کلاس را بررسی کند.
- یادداشتهای واریانس صریح (Explicit variance annotations) – استفاده از
+یا-روی پارامترهای جنریک، نشاندهنده کوواریانس (covariance) یا کنترواریانس (contravariance) است و دقت بررسیکنندهی نوع را بالا میبرد.
این موارد، اعتبار TypeScript را به عنوان یک زبان «نوع-محور» (type-first) تقویت میکنند، اما isolated declarations تنها ویژگیای است که مستقیماً با یک نقطه ضعف که با بزرگتر شدن اندازه پایگاه کد افزایش مییابد، مقابله میکند.
آنچه در آینده باید منتظر آن بود
خلاصه کلام
isolated declarations به تیمهایی که تمرکز اصلیشان بر monorepo است، ساختهای سریعتری میدهد. برای سازمانهایی که هزینه دقایق CI را پرداخت میکنند یا از بازسازیهای محلی کند رنج میبرند، ارتقا به TypeScript 7 یک حرکت کمخطر است که به صرفهجویی قابل اندازهگیری در زمان و هزینه منجر میشود. سایر بخشهای این نسخه، شبکههای ایمنی مفیدی را اضافه میکنند، اما موتور بررسی نوع موازی، ویژگی اصلی است که مستقیماً به چالش مقیاسپذیری در توسعه مدرن جاوااسکریپت پاسخ میدهد.
