0Pricing
TypeScript Academy · درس

‏TypeScript 5.1-5.2: تحسينات الاستدلال

استكشفوا استقلالية نوعي getter وsetter وتصريحات using

‏TypeScript 5.1-5.2: تحسينات الاستدلال درس مجاني في TypeScript Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في TypeScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة TypeScript Academy 4 دروس في المجموع.

نظرة عامة على TypeScript 5.1

حسّن TypeScript 5.1، الذي صدر في يونيو 2023، استقلالية أنواع setter وgetter، ومرونة أنواع عناصر JSX، والمؤشرات المرتبطة في المحررات، وتحسينات الأداء.

// npm install typescript@5.1

استقلالية نوع Setter وGetter

قبل الإصدار 5.1، كان يجب أن يستخدم setter وgetter النوع نفسه. أما الآن، فيمكن لـ getter إعادة نوع أوسع من النوع الذي يقبله setter، وهو أمر مفيد في أنماط التحويل القسري للأنواع.

class Temperature {
  get celsius(): string { return this._c + "°C"; } // string
  set celsius(value: string | number) {             // string | number
    this._c = Number(value);
  }
  private _c = 0;
}

undefined كعناصر فرعية في JSX

يتيح TS 5.1 للمكوّنات إرجاع undefined مباشرةً (بالإضافة إلى null) من دالة التصيير، بما يتوافق مع سلوك React 18.

// TS 5.1+: OK
function Widget(): undefined { return undefined; }
// Before 5.1: had to return null or JSX element

مرونة نوع عنصر JSX

يمنح القيد الجديد JSX.ElementType مصانع JSX المخصّصة مرونة أكبر، وهو مفيد في البيئات غير المعتمدة على React.

// Custom JSX element types supported more naturally in 5.1

نظرة عامة على TypeScript 5.2

قدّم TypeScript 5.2 (الذي صدر في أغسطس 2023) تصريحات using (إدارة الموارد الصريحة)، وبيانات تعريف المزيّنات، وطرائق نسخ المصفوفات.

// npm install typescript@5.2

تصريحات using

تطبّق using مقترح إدارة الموارد الصريحة؛ إذ تُستدعى طريقة [Symbol.dispose]() للمورد عند خروجه من النطاق.

// Requires lib: ["es2022", "esnext.disposable"]
function getConnection(): Disposable {
  const conn = openDb();
  return { [Symbol.dispose]() { conn.close(); } };
}

{
  using conn = getConnection();
  // conn.close() called automatically at block end
}

‏await using للتخلص غير المتزامن

تعمل await using مثل using، لكنها تستدعي طريقة غير متزامنة هي [Symbol.asyncDispose]()، مما يتيح تنفيذ التنظيف بشكل غير متزامن.

async function run() {
  await using db = await connectDb();
  // db[Symbol.asyncDispose]() called on exit
}

بيانات تعريف المزيّنات

يطبّق TS 5.2 مقترح TC39 لبيانات تعريف المزيّنات، مما يتيح للمزيّنات إرفاق بيانات تعريف عبر Symbol.metadata.

function meta(value: string) {
  return (_: unknown, ctx: DecoratorContext) => {
    ctx.metadata[ctx.name] = value;
  };
}

@meta("service")
class MyService {}
console.log((MyService as any)[Symbol.metadata]); // { "MyService": "service" }

طرائق نسخ المصفوفات

أضاف TS 5.2 أنواعًا للطرائق Array.prototype.toSorted وtoReversed وtoSpliced وwith — وهي عمليات غير قابلة للتغيير على المصفوفات من ES2023.

const arr = [3, 1, 2];
const sorted = arr.toSorted(); // [1, 2, 3] — new array, arr unchanged
const reversed = arr.toReversed(); // [2, 1, 3]

استخدام using في tsconfig للإصدار 5.2

لاستخدام تصريحات using، أدرج المكتبة esnext.disposable في ملف tsconfig.

{
  "compilerOptions": {
    "target": "ES2022",
    "lib": ["ES2022", "ESNext.Disposable"]
  }
}

مراجعة: TS 5.1–5.2

TS 5.1: أنواع مستقلة لـ getter/setter، وإرجاع undefined في JSX. TS 5.2: تصريحات using للتنظيف التلقائي للموارد، وبيانات تعريف المزيّنات، وأنواع طرائق نسخ المصفوفات غير القابلة للتغيير.

تحقق سريع

ماذا يفعل تصريح using في TypeScript 5.2؟

ما الذي تعلمته

قدّم TS 5.1 أنواعًا مستقلة لـ getter/setter وإرجاع undefined في JSX. أما TS 5.2 فقدّم تصريحات using لإدارة الموارد تلقائيًا، وبيانات تعريف المزيّنات، وأنواع طرائق المصفوفات غير القابلة للتغيير في ES2023.

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

هل درس «‏TypeScript 5.1-5.2: تحسينات الاستدلال» مجاني؟

نعم — نص درس «‏TypeScript 5.1-5.2: تحسينات الاستدلال» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة TypeScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة TypeScript Academy 4 دروس في المجموع.

ماذا ستتعلم في «‏TypeScript 5.1-5.2: تحسينات الاستدلال»؟

استكشفوا استقلالية نوعي getter وsetter وتصريحات using تتمرن على TypeScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ TypeScript Academy؟

لا تُشترط خبرة سابقة. TypeScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «‏TypeScript 5.1-5.2: تحسينات الاستدلال»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس TypeScript Academy هذا؟

نعم. كل درس في TypeScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. ‏TypeScript 5.0: المزيّنات القياسية ومعاملات الأنواع const
  2. ‏TypeScript 5.1-5.2: تحسينات الاستدلال
  3. ‏TypeScript 5.3-5.4: تضييق جديد وNoInfer
  4. ‏TypeScript 5.5+: التصريحات المعزولة وما بعدها
← العودة إلى TypeScript Academy