IT

ميزات TypeScript 5 الجديدة — دليل شامل لمعامل satisfies والـ Decorators

USD/JPY分散は、為替急変局面で一方通貨の過大シェアを防ぎ、月次の再バランスと上限規則で感情的な一括投資を抑える実践設計です。

ميزات TypeScript 5 الجديدة — دليل شامل لمعامل satisfies والـ Decorators

ميزات TypeScript 5 الجديدة — دليل شامل لمعامل satisfies والـ Decorators

text TypeScript 기능 satisfies TypeScript 기능 satisfies

ملخص سريع: TypeScript 5 يُقدّم معامل satisfies لفحص الأنواع دون التأثير على الاستنتاج، ونظام Decorators معياري وفق TC39، إلى جانب تحسينات جوهرية في الأداء تبلغ 10–20%.

أصدرت Microsoft إصدار TypeScript 5.0 في مارس 2023، وما تلاه من إصدارات فرعية تحمل تحسينات متراكمة. يُعدّ هذا الإصدار من أكثر الإصدارات تأثيرًا منذ TypeScript 4، إذ أعاد رسم طريقة التعامل مع الأنواع في مشاريع JavaScript الكبرى.

معامل satisfies

brown wooden puzzle blocks on white surface

يُعدّ satisfies أبرز إضافة في TypeScript 5. يتيح هذا المعامل التحقق من توافق قيمة مع نوع معيّن، مع الاحتفاظ بالنوع الأكثر دقة الذي استنتجه المُحوّل:

typescript
type Colors = Record<string, [number, number, number] | string>;

const palette = {
  red: [255, 0, 0],
  green: "#00ff00",
  blue: [0, 0, 255],
} satisfies Colors;

// يُستنتج النوع بدقة:
// palette.red  → [number, number, number]
// palette.green → string

قبل satisfies، كان المطوّر مضطرًا للاختيار بين دقة الاستنتاج أو التحقق من النوع، لكن المعامل الجديد يجمع الاثنين.

Decorators المعيارية (TC39 Stage 3)

تبنّى TypeScript 5 مواصفة TC39 Stage 3 للـ Decorators بدلًا من تطبيقه التجريبي القديم:

typescript
// المعيار الجديد
function logged(target: any, context: ClassMethodDecoratorContext) {
  return function (this: any, ...args: any[]) {
    console.log(`Calling ${String(context.name)}`);
    return target.call(this, ...args);
  };
}

class UserService {
  @logged
  getUser(id: number) {
    return { id, name: 'User' };
  }
}

التطبيق الجديد يختلف جوهريًا عن القديم (--experimentalDecorators)؛ لذا يستلزم الترقية مراجعة الكود الموجود.

تحسينات الأداء

قدّم TypeScript 5 تحسينات لافتة في سرعة البناء:

المقياسTypeScript 4.9TypeScript 5.0التحسّن
وقت البناء (مشروع كبير)100%82%18% أسرع
استهلاك الذاكرة100%85%15% أقل
حجم الحزمة100%80%20% أصغر

const Type Parameters

يُتيح TypeScript 5 استخدام const في المعاملات النوعية للحفاظ على القيم الحرفية:

typescript
function getFirst<const T extends readonly unknown[]>(arr: T): T[0] {
  return arr[0];
}

const result = getFirst([1, 2, 3] as const);
// النوع: 1 (وليس number)

Multiple Config Files

يدعم TypeScript 5 الآن مصفوفات في extends داخل tsconfig.json:

json
{
  "extends": ["@tsconfig/strictest/tsconfig.json", "@tsconfig/node18/tsconfig.json"],
  "compilerOptions": {
    "outDir": "dist"
  }
}

All Enums are Union Enums

باتت جميع enums في TypeScript 5 من نوع union، ما يُتيح تضييق النوع بشكل أكثر دقة:

typescript
enum Color { Red, Green, Blue }

function handleColor(c: Color) {
  if (c === Color.Red) {
    // c هنا من النوع Color.Red تحديدًا
  }
}

التحديث من TypeScript 4

أهم نقاط الانتباه عند الترقية:

  1. 1Decorators: إذا كنت تستخدم --experimentalDecorators، راجع التوافق مع المعيار الجديد
  2. 2Resolution Algorithm: تغيّر خوارزمية تحليل الوحدات — تحقق من moduleResolution
  3. 3Strictness: بعض فحوصات الأنواع باتت أكثر صرامة

الأسئلة الشائعة

ما الفرق بين satisfies و as؟

satisfies يتحقق دون تغيير النوع المستنتج، بينما as يُجبر المُحوّل على قبول نوع محدد متجاوزًا الفحص.

هل الـ Decorators الجديدة متوافقة مع المكتبات القديمة؟

ليس بالضرورة — مكتبات مثل class-validator وtypeorm بدأت التحديث لكن قد تحتاج إصدارات أحدث.

هل يمكن استخدام TypeScript 5 مع React القديم؟

نعم، TypeScript 5 متوافق مع React 17 وما فوق بدون مشاكل.

ما أهم ميزة في TypeScript 5 من الناحية العملية؟

satisfies يحل مشكلة شائعة جدًا في كود الإنتاج — التحقق من الأنواع مع الحفاظ على دقة الاستنتاج.

كيف أُهيئ Decorators بالمعيار الجديد؟

أزل experimentalDecorators: true من tsconfig.json واستخدم الـ Decorators مباشرة.

هل التحسينات في الأداء ملموسة في مشاريع صغيرة؟

التحسّن أوضح في المشاريع الكبيرة (1000+ ملف)، لكن حتى المشاريع الصغيرة تستفيد من تقليص حجم الحزمة.

🔧 Related Free Tools

ذو صلة