انتشار بتای TypeScript 7.1 با API رسمی کامپایلر و content mapper
حدود ۴ دقیقه مطالعه
تیم TypeScript روز ۲۰ اکتبر ۲۰۲۶ نسخهی بتای TypeScript 7.1 را منتشر کرد. طبق بلاگ رسمی که دنیل روزنواسر نوشته، مهمترین موارد این نسخه یک API رسمی برای کامپایلر، قابلیتی به نام content mapper برای فایلهای Vue و Svelte و مشابه آنها، پشتیبانی پایدار از es2026 و بهبود سرعت و مصرف حافظه است.
نصب و زمانبندی
نسخهی بتا را اینطور نصب کنید:
npm install -D typescript@beta
طبق بلاگ، تیم بعد از بتا روی سرعت و پایداری کار میکند، حدود یک ماه بعد Release Candidate میدهد و نسخهی نهایی «کمی بعد از آن» میآید. تاریخ دقیقی اعلام نشده. یک منبع ثانویه (WindowsForum) از برنامهی GitHub تاریخهای ۱۰ نوامبر برای RC و ۲۴ نوامبر برای انتشار نهایی را نقل میکند، ولی اینها هدف برنامهریزی هستند و تعهد رسمی نیستند.
API جدید کامپایلر
نقطههای ورود تازه شامل اینهاست: typescript/sync و typescript/async برای کلاینت کامپایلر، گزینهها، type checker و Program، مسیر typescript/fs برای فایلسیستمهای مخصوص هر درخواست، و سه مسیر typescript/ast، typescript/ast/is و typescript/ast/factory برای نوعهای AST، type guard ها و ساخت node. اشیای API، Program و Snapshot قابل Disposable هستند و با using پاک میشوند. با createSnapshot یک snapshot ساخته میشود و update آن را با هزینهی کم به نسخهی جدید میبرد. برای فایلسیستم هم createFileSystem، createFileSystemWithLib و createFileSystemLayer هست و emitToString بدون نوشتن روی دیسک خروجی میدهد.
محدودیتهای اعلامشده: API هنوز با تیمهای همکار در حال اصلاح است، لایههای فایلسیستم مجازی file watching ندارند و رویدادها باید از طریق fileNotifications در update داده شوند، و API فایل tsconfig.json را بارگذاری نمیکند و از گزینهی project پشتیبانی نمیکند. در بخش نظرها پرسیده شده که API در نسخهی نهایی 7.1 پایدار خواهد بود یا نه، و پست جواب نمیدهد.
Content mapper ها
قابلیت content mapper نقطهی افزونهای برای فایلهای زبانهای توکار مثل Vue، Astro، Svelte و MDX است. در tsconfig.json با کلید contentMappers ثبت میشود و هر مورد package، extensions و options دارد. چون mapper ها برنامهی اجرایی خارجیاند، اجرای آنها با یک سوییچ صریح انجام میشود:
tsc --runExternalCode
در VS Code این قابلیت به workspace trust و مجوز نیاز دارد و با این تنظیم خاموش میشود:
js/ts.contentMappers.enabled
نمونهی mapper برای Vue که در بلاگ آمده، فعلاً روی npm نیست.
قابلیتهای زبان و کتابخانه
اعلانهای ambient module ها حالا میتوانند بر اساس import attribute تطبیق بدهند، مثلاً برای فایلهای CSS، متن یا بایت:
declare module "*" with { type: "css" }
این اعلانها داخل TypeScript نیستند و پروژه باید خودش آنها را تعریف کند. TypeScript وجود فایل روی دیسک را بررسی نمیکند و خطا در زمان اجرا یا bundle دیده میشود. همچنین source phase import با شکل import source پشتیبانی میشود که یک AbstractModuleSource (برای فایل wasm نمونهی WebAssembly.Module) برمیگرداند. این قابلیت به module از نوع esnext، nodenext یا preserve نیاز دارد و پشتیبانی از منبعهای جاوااسکریپت فعلاً محدود است.
گزینههای target و lib با مقدار es2026 پایدار شدهاند و API هایی مثل Math.sumPrecise، Iterator.concat، JSON.rawJSON، Error.isError، Array.fromAsync، متدهای getOrInsert روی Map و WeakMap، و متدهای base64 و hex برای Uint8Array را اضافه میکنند. در esnext هم Promise.allKeyed، Promise.allSettledKeyed، Iterator.zip و چند متد دیگر آمده است.
سرعت و حافظه
اندازهگیریها طبق بلاگ با ۴ رشتهی checker و گزینهی noEmit انجام شده و ادعای خود تیم TypeScript است:
mui-docs 22.2s → 11.9s (1.9x)
t3code-server 26.5s → 19.1s (1.4x)
sentry 19.6s → 15.1s (1.3x)
bluesky 4.48s → 3.89s (1.2x)
vscode 21.6s → 17.7s (1.2x)
مصرف حافظه هم کم شده؛ بیشترین کاهش مربوط به mui-docs از ۸٬۰۹۳ به ۴٬۰۷۹ مگابایت (حدود ۴۹٫۶ درصد) است. اینها مقایسه با TypeScript 7.0 هستند و روی پروژهی شما ممکن است فرق کنند.
تغییرهای رفتاری
نوعهای DOM در lib.d.ts بهروز شدهاند و ممکن است روی type checking اثر بگذارند. شرطهای توزیعی (distributive conditional types) هم سختگیرانهتر شدهاند: داخل شاخهی توزیعشده، پارامتر نوع بهعنوان یک نوع جدید و باریکتر دیده میشود. کدی مثل زیر حالا خطا میدهد و راهحل، حذف constraint غیرضروری یا افزودن بررسی شرطی است:
type T<A, B> = A extends B ? never : Show<A, B>
بلاگ هیچ deprecation یا حذف صریحی فهرست نکرده است.
منابع:
