modern-web-types: حل دردسر تایپاسکریپت با APIهای جدید وب
خلاصهٔ کاملتر
تایپاسکریپت فقط وقتی یه API وب رو تو کتابخونهی رسمیش میذاره که حداقل دو موتور مرورگر اون رو پیادهسازی کرده باشن. یعنی حتی اگه یه API تو کروم کاملاً پایدار و قابل استفاده بهعنوان یه بهبود تدریجی (progressive enhancement) باشه، تا وقتی موتور دومی هم پیادهش نکنه، تایپاسکریپت بهت خطا میده. نویسنده چند نمونه از این خطاها رو نشون میده: سر استفاده از element-scoped view transitions، Long Animation Frame API، و متد fetchLater().
برای حل این مشکل، فیلیپ والتون پکیج modern-web-types رو ساخته؛ یه جایگزین آماده برای کتابخونههای رسمی DOM و WebWorker که از همون تولیدکنندهی رسمی تایپاسکریپت استفاده میکنه ولی آستانه رو از دو موتور به یه موتور کاهش میده. نصبش سادهست: کافیه پکیج رو زیر نام مستعار @typescript/lib-dom نصب کنی و اگه از تایپاسکریپت ۶ به بعد استفاده میکنی، گزینهی libReplacement رو هم تو tsconfig.json روشن کنی.
npm install --save-dev @typescript/lib-dom@npm:modern-web-typesبه گفتهی نویسنده، وقتی آستانه رو به یه موتور کاهش بدی، عدد تعریفهای جدید غافلگیرکنندهست: بیش از ۴۰۰ اینترفیس تازه برای DOM و ۱۴۴ تا برای WebWorker، بهعلاوه دهها نوع و متغیر سراسری جدید. جالبتر اینه که بیش از ۳۰۰ متد و پراپرتی هم به اینترفیسهای آشنایی مثل Document، Element، Navigator و Request اضافه میشه؛ یعنی چیزهایی که هر روز باهاشون کار میکنی، نه فقط APIهای عجیب و نادر.
نویسنده معتقده قانون دو-موتور واقعاً از سازگاری وب محافظت نمیکنه، چون نبود تایپ رسمی باعث نمیشه سایتها از یه API استفاده نکنن، فقط باعث میشه با تایپ ناقص یا any ازش استفاده کنن. اون مثال میزنه که APIهای عملکردی مثل LargestContentfulPaint یا fetchpriority اول فقط تو کروم بودن، ولی همین که سایتهای زیادی زودتر ازشون استفاده کردن، عملکرد کل وب رو بهتر کرده.
تولید تایپها کاملاً خودکاره: هر هفته یه اکشن گیتهاب دوباره تولیدشون میکنه و اگه چیزی عوض شده باشه، یه Pull Request باز میشه. نویسنده میگه اگه استفادهکنندههای این پکیج زیاد بشن، شاید خود تایپاسکریپت هم قانون دو-موتوریش رو شلتر کنه.
نکات کلیدی:
- پکیج modern-web-types جایگزین کتابخونههای DOM و WebWorker تایپاسکریپته و با آستانهی یه موتور (بهجای دو موتور) تایپ تولید میکنه.
- نصب با npm install --save-dev @typescript/lib-dom@npm:modern-web-types و روشن کردن libReplacement تو tsconfig.json برای تایپاسکریپت ۶ به بعد.
- در آستانهی یه موتور، بیش از ۴۰۰ اینترفیس تازه برای DOM و ۱۴۴ تا برای WebWorker اضافه میشه.
- بیش از ۳۰۰ متد و پراپرتی جدید هم به اینترفیسهای پرکاربردی مثل Document و Navigator اضافه میشه.
- تولید تایپها با اکشن گیتهاب هفتگی خودکار آپدیت میشه.




