0Pricing
TypeScript Academy · درس

تحديد النوع السياقي: الاستدلال من السياق

افهموا كيفية استدلال TypeScript للأنواع من السياق المحيط

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

ما الكتابة السياقية؟

تحدث الكتابة السياقية عندما يستنتج TypeScript نوع تعبير استنادًا إلى الموضع الذي يظهر فيه — إذ يوفّر السياق النوع، وليس القيمة نفسها.

document.addEventListener("click", (e) => {
  // e is inferred as MouseEvent from the event type
  console.log(e.clientX);
});

الكتابة السياقية في دوال الاستدعاء اللاحقة

عندما تمرر دالة استدعاء لاحقة إلى دالة محددة النوع، يستنتج TypeScript أنواع المعاملات من توقيع دالة الاستدعاء اللاحقة المتوقع.

const nums = [1, 2, 3];
nums.forEach((n) => {
  // n inferred as number from Array<number>
  console.log(n.toFixed(2));
});

الكتابة السياقية والقيم الحرفية للكائنات

عند إسناد قيمة حرفية لكائن إلى متغير محدد النوع، تُستنتج أنواع خصائصها من ذلك النوع، ما يتيح إجراء فحوص دقيقة.

interface Config { timeout: number; retries: number; }
const config: Config = {
  timeout: 3000,
  retries: 3,
  // extra: true // Error: excess property
};

الكتابة السياقية في JSX

في React، تُحدَّد أنواع خصائص معالجات الأحداث سياقيًا، لذلك تُستنتج أنواع معاملات الأحداث تلقائيًا.

function Button({ onClick }: { onClick: (e: React.MouseEvent) => void }) {
  return <button onClick={onClick}>Click</button>;
}
// Caller: e is inferred as React.MouseEvent
<Button onClick={(e) => console.log(e.currentTarget)} />

الكتابة السياقية مقابل التعليقات التوضيحية الصريحة

الكتابة السياقية قوية، لكن يمكن تجاوزها بتعليقات توضيحية صريحة. وعند وجود كليهما، تكون الكتابة الصريحة لها الأولوية على السياقية.

const handler: (x: string) => void = (x: number) => {}; // Error
// Explicit annotation (number) conflicts with contextual (string)

الكتابة السياقية مع التفكيك

ترث المعاملات المفككة في الدوال ذات الكتابة السياقية أنواعها من السياق أيضًا.

const pairs: [string, number][] = [["a", 1]];
pairs.forEach(([key, value]) => {
  // key: string, value: number — contextually typed
  console.log(key.toUpperCase(), value * 2);
});

الكتابة السياقية وأنواع القيم المُعادة

عند إسناد دالة إلى متغير محدد النوع، يُستنتج نوع القيمة المُعادة سياقيًا أيضًا.

type Transform = (x: number) => string;
const double: Transform = (x) => x * 2; // Error: number not string
const str: Transform = (x) => String(x * 2); // OK

الكتابة السياقية في التعبيرات الشرطية

يمكن لـ TypeScript تمرير الأنواع السياقية إلى التعبيرات الثلاثية والمعاملات المنطقية.

const result: string | null =
  Math.random() > 0.5 ? "yes" : null; // both arms typed by context

قيود الكتابة السياقية

لا تنطبق الكتابة السياقية عندما يكون التعبير في موضع غير سياقي، مثل متغير مستقل بلا تعليق توضيحي.

const fn = (x) => x + 1; // x: any — no context to infer from
// Add annotation: const fn = (x: number) => x + 1;

الاستدلال ثنائي الاتجاه

يجري TypeScript استدلالًا ثنائي الاتجاه للأنواع: من الأعلى إلى الأسفل، أي سياقيًا، ومن الأسفل إلى الأعلى، انطلاقًا من التعبير. ويتعاون الاتجاهان لتوفير أدق نوع ممكن.

function apply<T>(fn: (x: T) => T, val: T): T { return fn(val); }
apply((x) => x.toUpperCase(), "hello"); // x inferred as string

مراجعة: الكتابة السياقية

تتيح الكتابة السياقية لـ TypeScript استنتاج الأنواع من الموضع الذي يُستخدم فيه التعبير — وتستفيد من هذه الآلية دوال الاستدعاء اللاحقة، وعمليات الإسناد، وخصائص JSX، والتفكيك.

تحقق سريع

متى تنطبق الكتابة السياقية على معامل في دالة استدعاء لاحقة؟

ما تعلمته

الكتابة السياقية هي استنتاج TypeScript للأنواع من الموضع بدلًا من القيمة. وهي تجعل دوال الاستدعاء اللاحقة ومعالجات الأحداث وعمليات الإسناد محددة النوع موجزة مع الحفاظ على أمان الأنواع.

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

هل درس «تحديد النوع السياقي: الاستدلال من السياق» مجاني؟

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

ماذا ستتعلم في «تحديد النوع السياقي: الاستدلال من السياق»؟

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

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

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

كم من الوقت يستغرق درس «تحديد النوع السياقي: الاستدلال من السياق»؟

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

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

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

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

  1. آليات توسيع الأنواع وتضييقها
  2. تحديد النوع السياقي: الاستدلال من السياق
  3. التحقق من الخصائص الزائدة وحداثة الكائنات
  4. تأكيدات const وas const
← العودة إلى TypeScript Academy