زیر پوست پروژهی modern-web-types
خلاصهٔ کاملتر
modern-web-types جایگزین کتابخونههای lib.dom.d.ts و lib.webworker.d.ts تایپاسکریپته، با همون کیفیت تولیدشدهی رسمی ولی برای APIهایی که فقط تو یه مرورگر (نه لزوماً دوتا) شیپ شدن. برای پروژههای عادی، نصبش زیر نام مستعار @typescript/lib-dom پیشنهاد میشه؛ برای محیطهای دیگه مثل وبورکر، باید lib مربوطه رو از lib حذف کنی و entry point پکیج رو تو types اضافه کنی:
{
"compilerOptions": {
"types": ["modern-web-types/webworker"],
"lib": ["ESNext"]
}
}نکتهی مهم اینه که همین که types رو تو tsconfig تعریف کنی، تایپاسکریپت دیگه خودکار همهی پکیجهای @types/* تو node_modules رو شامل نمیشه، فقط همونایی که خودت لیست کردی.
فرآیند تولید تایپ چهار مرحله داره: اول، خود جنریتور رسمی مایکروسافت پین و پچ میشه تا آستانهی موتورش از روی یه متغیر محیطی خونده بشه. دوم، از یه اسنپشات دیتای یکسان، دوبار ساخت انجام میشه؛ یکی با آستانهی رسمی دو موتور به اسم baseline، یکی با آستانهی یه موتور به اسم full. سوم، دو خروجی با API کامپایلر تایپاسکریپت بهصورت ساختاری مقایسه میشن تا دقیقاً همون بخشی که قانون دو-موتوری حذف کرده مشخص بشه. چهارم، اسکریپت emit-lib این تفاوت رو به شکل کتابخونهی نهایی برای هر محیط تبدیل میکنه.
آپدیتها زمانبندیشدهن: هر دوشنبه یه ورکفلوی گیتهاب جنریتور و دیتای رجیستری رو به آخرین کامیتشون پین میکنه، هر پنج کتابخونه رو دوباره میسازه، تستها رو اجرا میکنه و اگه چیزی عوض شده باشه یه Pull Request باز میکنه؛ تایید PR فعلاً تنها مرحلهی دستیه. یعنی یه API که تو یه مرورگر شیپ بشه، تو اولین اجرای دوشنبهی بعدی خودش رو تو پکیج نشون میده.
برای توسعه، دو نسخهی تایپاسکریپت همزمان نصبه چون اسکریپتهای diff و emit-lib فایلهای .d.ts رو با API کامپایلری پارس میکنن که تایپاسکریپت ۷ به مسیر typescript/unstable/* منتقلش کرده. به همین خاطر typescript روی نسخهی ۶ نگه داشته میشه و typescript-7 به آخرین نسخه اشاره داره؛ تستها خروجی تولیدشده رو زیر هر دو کامپایلر بررسی میکنن، چون این همون چیزیه که مصرفکنندهها باهاش کامپایل میکنن. انتشار نسخهی جدید هم با تغییر فیلد version تو pkg/package.json فعال میشه.
نکات کلیدی:
- کتابخونهی DOM از طریق نام مستعار @typescript/lib-dom نصب میشه؛ برای وبورکر و انواع دیگه باید entry point جدا رو تو types گذاشت.
- فرآیند تولید چهار مرحله داره: پین/پچ جنریتور، ساخت دوگانه (baseline و full)، دیف ساختاری، و emit خروجی نهایی.
- آپدیتها با یه ورکفلوی گیتهاب هر دوشنبه خودکار اجرا میشن و فقط تایید PR دستیه.
- توسعهی پروژه همزمان با تایپاسکریپت ۶ و آخرین نسخه (۷) تست میشه چون diff.ts و emit-lib.ts به API کامپایلر قدیمی نیاز دارن.
- پکیج پنج entry point جدا داره: dom، webworker، serviceworker، sharedworker و audioworklet.




