محتويات الدورة

TypeScript / الأساسي / الدرس 5

الكائنات والواجهات والأنواع البنيوية

صف قدرات الكائن دون خلط العرض الساكن بالبنية التنفيذية الدقيقة أو الملكية أو الثبات العميق.

وقت القراءة التقريبي: 3 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • تعريف الخصائص اللازمة والاختيارية وreadonly.
  • شرح التوافق البنيوي وفحص الخصائص الزائدة.
  • اختيار الواجهات والأسماء البديلة وتواقيع الفهرسة بوعي.

يصف النوع العمليات المسموحة عبر العرض

يصف نوع الكائن خصائص وأساليب يتوقع الوصول إليها. تسمي الواجهة بنية وقد تمتد من أخرى، ويسمي type كائنًا أو اتحادًا أو صفًا وغيرها. لا ينشئان منشئًا تنفيذيًا ولا يحذفان الحقول الزائدة. ابدأ بعمليات المجال والبيانات ثم اختر صياغة واضحة. استخدم أسماء صغيرة عند الحدود ليفهم التشخيص مفهومًا ذا معنى بدل بنى متشابهة مكررة.

نمذجة الغياب وتقييد الوصول منفصلين

قد تغيب الخاصية الاختيارية. مع exactOptionalPropertyTypes يسمح label?: string بالإغفال لا بكتابة label: undefined تلقائيًا، وتظل القراءة محتملة الغياب. تمنع readonly الإسناد عبر المسار ولا تجمد التنفيذ أو تمنع اسمًا آخر قابلًا للتعديل. يعرّف المثال معرّفًا ثابت الوصول وتسمية اختيارية، ويعطي بديلًا للغياب فقط؛ فيحفظ النص الفارغ الصحيح.

typescript بيانات اختيارية ببديل صريح
export {};
interface Entry { readonly id: number; label?: string }
function display(entry: Entry): string {
  return `${entry.id} ${entry.label ?? "unnamed"}`;
}
console.log(display({ id: 7 }));
الناتج المتوقع
7 unnamed

يغفل الكائن label ويستخدم المنسق unnamed عند قراءتها دون تعديل الكائن.

يعتمد التوافق غالبًا على الأعضاء

تستخدم TypeScript توافقًا بنيويًا غالبًا؛ تلائم القيمة الواجهة بأعضائها لا باسم منشئها. يسند المثال كائنًا أغنى إلى عرض أضيق، وتبقى age فعلية رغم عدم إتاحتها مباشرة بالنوع الضيق. يفيد ذلك واجهات القدرات ولا يعرّف مخططًا دقيقًا أو يحذف الأسرار قبل التسلسل. أنشئ ناتجًا صريحًا إذا وجب اختيار حقول عامة فقط.

typescript النوع الأضيق لا يحذف الحقول التنفيذية
export {};
interface Named { name: string }
const person = { name: "Mira", age: 30 };
const view: Named = person;
console.log(view.name, "age" in view);
الناتج المتوقع
Mira true

تشير view إلى الكائن نفسه، فيعرض نوعها name وتلاحظ in وجود age فعلًا.

تُفحص الكائنات الحرفية الجديدة بحثًا عن الأخطاء

تتلقى الكائنات الحرفية فحوص خصائص زائدة في سياقات كثيرة لكشف أسماء الخيارات الخاطئة. لا يجعل ذلك كل نوع دقيقًا؛ فقد يختلف إسناد متغير أغنى مستنتج. لا تتجاوز خطأ إملائيًا بتوقيع فهرسة إلا لدعم مفاتيح فعلية. يفرض التوقيع علاقة قيم ويقيد الخصائص المسماة. لا ينشئ Record<string, number> كل المفاتيح فعليًا، ويستلزم الوصول غير المؤكد معالجة الغياب.

قصدية النسخ والتسلسل

ينشئ الانتشار نسخة سطحية وقد تبقى الكائنات الداخلية مشتركة. لا تجعل readonly الداخل ثابتًا إلا بتصميم نوعه. حدّد حقول تحديث الإعداد وافحصها قبل الالتزام. ابنِ تمثيل العرض بدل تأكيد كائن خاص لواجهة عامة وتسلسل الأصل. قد يفيد امتداد الواجهات ودمج التصريحات، وقد تؤثر تصريحات عامة عرضية في ملفات أخرى؛ فاستخدم الوحدات عندما لا تقصد التوسعة العامة.

الأخطاء الشائعة وإصلاحها

تعذر إسناد undefined لخاصية اختيارية.

لماذا يحدث؟
تميّز الدلالة الدقيقة الإغفال من undefined الصريحة.
كيف تصلحه؟
أغفل الحقل أو أضف undefined عمدًا للنوع.
كيف تتجنب تكراره؟
حدّد دلالة التحديث والتسلسل.

ظهور حقول خاصة في ناتج عام متسلسل.

لماذا يحدث؟
اعتُبر العرض الضيق حذفًا للحقول.
كيف تصلحه؟
أنشئ كائنًا عامًا صريحًا قبل التسلسل.
كيف تتجنب تكراره؟
اختبر مفاتيح الناتج الفعلية لا الإسناد وحده.

كائن داخلي readonly يتغير.

لماذا يحدث؟
القيد سطحي أو يعدله اسم آخر.
كيف تصلحه؟
صمّم عرض الثبات وسياسة الملكية اللازمة.
كيف تتجنب تكراره؟
راجع التشارك مستقلًا عن صياغة الواجهة.

اختبر فهمك

1. استدع display بمعرّف سبعة وتسمية فارغة وقارن البديل باستخدام ||.

اعرض الحل المشروح

النص "7 " بمسافة أخيرة لأن التسمية موجودة ويحفظها ??. يستبدلها || بـunnamed. اختر سلوك المجال ولا تعتبر المعاملين متبادلين. اختبر الإغفال والنص الفارغ منفصلين.

2. يحوي كائن name وsecretToken وتذكر الواجهة العامة name فقط. صف إنشاء ناتج آمن واختباره.

اعرض الحل المشروح

أنشئ { name: user.name } وسلسِل الكائن المختار. افحص فعليًا أن المفتاح name وحده موجود وأن secretToken غائبة. لا يحذف إسناد الأصل للواجهة حقوله وليس مرشح أمان. طبّق الصلاحيات أيضًا عند حد الوصول.

أهم ما تعلمته

  • أنواع الكائن عروض قدرات لا منظفات.
  • تختلف الاختيارية وreadonly والملكية.
  • اختبر المفاتيح والتعديل الداخلي عند أهميتهما.

المراجع الرسمية