حل مشكلة TypeScript: تجنب خطأ ‘Cannot set property’ مع الواجهات
في سياق لغة TypeScript، يظهر الخطأ “Cannot set property ‘first’ of undefined” عند محاولة تعيين قيمة لخاصية first
في الكائن name
الذي لم يتم تعيين قيمة له بعد. في الشيفرة المرفقة، يظهر أن الكائن name
هو من نوع Name
ويتم إعلانه في الفئة Person
، ولكنه لم يتم تهيئته بقيمة ابتدائية. لحل هذا الخطأ، يجب تهيئة الكائن name
بقيمة مناسبة قبل محاولة الوصول إلى خاصيته.
يمكن تحقيق ذلك عبر تعديل الطريقة setName
في الفئة Person
لتهيئة الكائن name
قبل تعيين قيمة لخاصياته. إليك الشيفرة المعدلة:
-
تنفيذ قائمة مرتبطة في جافا25/03/2024
-
فروق بين android:src و tools:src02/04/2024
-
تأثير الرفع في JavaScript10/03/2024
typescriptinterface Name {
first: string;
last: string;
}
class Person {
private name: Name;
constructor() {
// تهيئة الكائن name عند إنشاء الكائن من الفئة
this.name = { first: '', last: '' };
}
public setName(firstName: string, lastName: string) {
// تعيين قيم الخصائص
this.name.first = firstName;
this.name.last = lastName;
}
}
var person1 = new Person();
person1.setName('Tracy', 'Herrera');
في هذا التعديل، تم إضافة ميثود constructor إلى الفئة Person
لضمان تهيئة الكائن name
عند إنشاء الكائن. هذا يحل المشكلة التي تسببت في ظهور الخطأ، وبالتالي يتيح لك تعيين قيم للخصائص بدون أي مشاكل.
المزيد من المعلومات
في تطوير البرمجيات باستخدام TypeScript، يتم استخدام الواجهات (Interfaces) لتحديد هياكل البيانات وأنواع الكائنات. في الشيفرة المقدمة، تم تعريف واجهة Name
لتحديد تركيبة الكائن الذي يحتوي على الخصائص first
و last
من النوع string
.
علاوة على ذلك، تم إنشاء فئة Person
التي تحتوي على خصوصية name
من نوع الواجهة Name
. يتم تعيين قيم لهذه الخصائص من خلال استخدام الطريقة setName
، ولكن كان من الضروري تهيئة الكائن name
قبل الوصول إليه.
مع إضافة ميثود constructor
، يمكننا التحكم في تهيئة الكائن عند إنشاء كائن من الفئة Person
. هذا يعزز استدعاء الطريقة setName
بدون حدوث أخطاء ذات صلة بقيم الكائن غير المهيأة.
بشكل عام، يجب دائمًا تأكيد تهيئة الكائنات قبل الوصول إليها لتجنب الأخطاء المتعلقة بالقيم الفارغة أو غير المهيأة. في السياق الخاص بـ TypeScript، هذا يلعب دورًا هامًا في تحسين الكود وجعله أكثر دقة واستقراراً.