حل مشكلة TypeScript: تفادي خطأ ‘Property ‘src’ does not exist on type ‘HTMLElement’
في مشكلتك الحالية مع TypeScript، يظهر خطأ يتعلق بخاصية ‘src’ التي لا توجد على نوع ‘HTMLElement’. لفهم الخطأ وحله، يتعين عليك فهم كيف يعمل TypeScript في التعامل مع أنواع الكائنات وكيفية تعريف وتحديد الأنواع.
عندما تعرف المتغير element
بأنه من نوع HTMLElement
، يتوقع TypeScript أن يحتوي هذا الكائن على الخصائص القياسية التي تنتمي إلى HTMLElement
. ومع ذلك، لا يتوفر خاصية ‘src’ على ‘HTMLElement’ بشكل افتراضي. لتفادي هذا الخطأ، يجب أن تقوم بتعريف المتغير element
بنوع يحتوي على الخاصية ‘src’.
في حالتك، يمكنك تحديد element
ككائن من نوع HTMLImageElement
بدلاً من HTMLElement
. يتضمن HTMLImageElement
خاصية ‘src’ بشكل افتراضي. يمكنك القيام بذلك على النحو التالي:
typescriptelement: HTMLImageElement; /* تعريف العنصر بنوع HTMLImageElement */
// ...
this.element = document.createElement('img') as HTMLImageElement; /* إنشاء عنصر صورة */
// ...
display() {
this.element.src = this.file; /* هذا السطر لن يسبب خطأ الآن */
this.element.style.position = "absolute";
this.element.style.top = this.pointX.toString() + "px";
this.element.style.left = this.pointY.toString() + "px";
document.body.appendChild(this.element);
};
الآن، عندما تعرف element
ك HTMLImageElement
، لن يظهر خطأ الخصائص غير الموجودة، ويمكنك تعيين قيمة ‘src’ دون مشاكل. يجب أن يساعدك هذا على تجنب الخطأ الحالي الذي تواجهه مع TypeScript.
المزيد من المعلومات
تحتاج إلى فهم أعمق لكيفية تعامل TypeScript مع أنواع الكائنات وكيف يمكنك تعيين أنواع محددة للمتغيرات لتجنب الأخطاء المحتملة. يعتبر TypeScript لغة برمجة تعتمد على تحليل الأنواع (TypeScript is a statically typed superset of JavaScript)، مما يعني أنها تتحقق من الأنواع في وقت التصميم قبل تشغيل الكود.
في المثال الحالي، قمت بتحديد نوع المتغير element
كـ HTMLImageElement
، ولكن هناك المزيد للاستفادة من TypeScript:
-
تحديد الأنواع للوسائط (Parameters) والقيمة المُرجَعَة (Return Type):
يمكنك تحديد الأنواع لوسائط الدوال وقيمة العودة، مما يجعل التعاون مع الكود أكثر فعالية. على سبيل المثال:typescriptdisplay(file: string, pointX: number, pointY: number): void { // ... }
هذا يجعل الدالة
display
تتوقع وسائط محددة النوع ولا ترجع قيمة. -
استخدام Interface:
يمكنك استخدام واجهات (interfaces) لتعريف هياكل البيانات وأنواع الكائنات. على سبيل المثال:typescriptinterface DisplayElement { element: HTMLImageElement; file: string; pointX: number; pointY: number; } class YourClass implements DisplayElement { element: HTMLImageElement; file: string; pointX: number; pointY: number; constructor(file: string, pointX: number, pointY: number) { // ... } display(): void { // ... } }
هذا يسهل تنظيم وفهم هيكل الكود.
-
استخدام TypeScript Compiler Options:
يمكنك تكوين TypeScript باستخدام ملفtsconfig.json
لتحديد خيارات الكمبايل، مثل مستوى التحقق من الأنواع ومستوى التفاصيل الذي يظهر في الرسائل. على سبيل المثال:json{ "compilerOptions": { "strict": true, "noImplicitAny": true, // ... } }
هذا يضمن تشديد مستوى التحقق من الأنواع.
-
تفعيل strictNullChecks:
يمكنك تفعيل خاصيةstrictNullChecks
فيtsconfig.json
لتفادي قيمnull
أوundefined
غير مرغوب فيها.json{ "compilerOptions": { "strictNullChecks": true, // ... } }
هذا يضمن أن لا تكون القيمة
null
أوundefined
خيارة للأنواع التي تم تحديدها.
باستخدام هذه الأفكار، يمكنك تعزيز تجربة التطوير الخاصة بك وتجنب الأخطاء المحتملة في المستقبل.