اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

نحن نعلم أن لغة typescript تحدد نوع المتغير فهي يجب عليها التمييز هل المتغير من نوع رقم أم نص الخ.

عندما غيرنا المتغير من مصفوفة أرقام إلى نص فهذا يعني أن typescript عندما رأت المتغير أول مرة فهمت أن هذا المتغير من نوع مصفوفة أرقام وليس نص وبناء عليها اكملت وعندما غيرنا القيمة تحول لنص وهذا غريب على typescript  لانها تتوقع أن يكون المتغير مصفوفة من الأرقام.

لتجنب هذه المشكلة يمكنك عمل التالي وهي تحديد نوع المتغير ب any أي يعني أنه قد يكون نصا او رقما.

let numbers: any = [1,2,3,4,5];
numbers = 'Hello World';

لكن ان كانت المعلومات لن تتغير فلا ينصح بوضع any حيث أنها ستساعدك typescript بوجود الأخطاء ان حصل تغيير في نوع البيانات.

  • 0
نشر

الخطأ في السطر الثاني هنا:

numbers = 'Hello World';

لأن TypeScript عندما رأى السطر الأول:

let numbers = [1,2,3,4,5];

استنتج تلقائياً أن المتغير numbers نوعه number[] أي مصفوفة أرقام وبالتالي عندما حاولت في السطر الثاني تعيين نص إلى هذا المتغير، رفض TypeScript ذلك وأظهر خطأ لأنه يتوقع مصفوفة أرقام وليس نص، بينما JavaScript سمح بذلك لأنه لا يهتم بأنواع البيانات ويقبل تغيير نوع المتغير في أي وقت.

لذا الحل هو أن تخبر TypeScript من البداية أن هذا المتغير يمكن أن يكون مصفوفة أرقام أو نص باستخدام Union Types هكذا:

let numbers: number[] | string = [1,2,3,4,5];

وبعدها السطر

numbers = 'Hello World';

سيعمل بدون مشاكل، أو يمكنك استخدام متغيرين منفصلين بدلا من تغيير نوع المتغير الواحد، والهدف من هذا السلوك في TypeScript هو منعك من الوقوع في أخطاء غير مقصودة قد تحدث بسبب تغيير أنواع المتغيرات عن طريق الخطأ.

  • 0
نشر

السبب الرئيسي في كيفية تعامل JavaScript و TypeScript مع الأنواع (Types).

فإن JavaScript هي لغة برمجة ذات أنواع ديناميكية (dynamically typed) وهذا يعني أنك لست بحاجة لتحديد نوع المتغير عند تعريفه ويمكن للمتغير أن يحمل أنواعا مختلفة من البيانات خلال فترة تشغيل البرنامج.

ففي مثالك عندما تكتب let numbers = [1,2,3,4,5]; يتعرف JavaScript على numbers في البداية كمصفوفة من الأرقام. وعندما تكتب numbers = 'Hello World'; يسمح JavaScript بتغيير نوع numbers من مصفوفة إلى سلسلة نصية دون أي مشكلة لأنها تتكيف مع النوع الجديد وليست ثابته على نوع واحد.

أما TypeScript فهي تضيف ميزة الأنواع الثابتة (statically typed) وهذا يعني أن TypeScript يحاول معرفة نوع المتغير في وقت التحويل البرمجي (compile time) ويفرض هذا النوع وهذا يساعد على اكتشاف الأخطاء المحتملة قبل تشغيل الكود.

فهنا في المثال لديك عندما تكتب let numbers = [1,2,3,4,5]; يقوم TypeScript باستنتاج النوع (Type Inference) ويحدد أن نوع المتغير numbers هو number[] أي مصفوفة من الأرقام.

وعندما تحاول بعد ذلك كتابة numbers = 'Hello World'; يقوم TypeScript بفحص هذا التعيين ويكتشف أنك تحاول تعيين سلسلة نصية (string) لمتغير تم تحديده مسبقًا على أنه مصفوفة أرقام number[] وهذا تناقض في الأنواع ولذلك يظهر خطأ.

  • 0
نشر
بتاريخ 4 دقائق مضت قال Hxfhf Ucicic:

اذن في الوقت الحالي او انتم كيف تقومون بانشاء المشاريع هل من js ام من ts

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

وفي المشاريع الكبيرة التي يعمل عليها فريق، يصبح الكود المكتوب بـ JS معقدًا وصعب الفهم، أي بدون TS فأي مبرمج جديد ينظر إلى دالة مثل processData(data)، سيتساءل ما هو شكل data؟ هل هو كائن object؟ ما هي خصائصه؟ هل هو مصفوفة array؟ أم رقم؟ سيضطر لقراءة الكود بالكامل أو تتبعه ليفهم.

بالتالي منذ سنوات قليلة أصبحت TS هي اللغة الأساسية لتطوير مشاريع جافاسكريبت، ومتوقع منك أن تكون متقن لها بنسبة جيدة.

ستجد تفصيل هنا:

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...