Zen Eddin Allaham نشر 14 يونيو أرسل تقرير نشر 14 يونيو لقد جربت كود في JavaScript ولقد عمل بشكل طبيعي وجربته ايضاً في TypeScript ظهر خطأ لماذا let numbers = [1,2,3,4,5]; numbers = 'Hello World'; console.log(numbers) 4 اقتباس
0 عماد شيخ العشرة نشر 14 يونيو أرسل تقرير نشر 14 يونيو نحن نعلم أن لغة typescript تحدد نوع المتغير فهي يجب عليها التمييز هل المتغير من نوع رقم أم نص الخ. عندما غيرنا المتغير من مصفوفة أرقام إلى نص فهذا يعني أن typescript عندما رأت المتغير أول مرة فهمت أن هذا المتغير من نوع مصفوفة أرقام وليس نص وبناء عليها اكملت وعندما غيرنا القيمة تحول لنص وهذا غريب على typescript لانها تتوقع أن يكون المتغير مصفوفة من الأرقام. لتجنب هذه المشكلة يمكنك عمل التالي وهي تحديد نوع المتغير ب any أي يعني أنه قد يكون نصا او رقما. let numbers: any = [1,2,3,4,5]; numbers = 'Hello World'; لكن ان كانت المعلومات لن تتغير فلا ينصح بوضع any حيث أنها ستساعدك typescript بوجود الأخطاء ان حصل تغيير في نوع البيانات. اقتباس
0 ياسر مسكين نشر 14 يونيو أرسل تقرير نشر 14 يونيو الخطأ في السطر الثاني هنا: 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 محمد_عاطف نشر 14 يونيو أرسل تقرير نشر 14 يونيو السبب الرئيسي في كيفية تعامل 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 Zen Eddin Allaham نشر 14 يونيو الكاتب أرسل تقرير نشر 14 يونيو اذن في الوقت الحالي او انتم كيف تقومون بانشاء المشاريع هل من js ام من ts 1 اقتباس
0 Mustafa Suleiman نشر 14 يونيو أرسل تقرير نشر 14 يونيو بتاريخ 4 دقائق مضت قال Hxfhf Ucicic: اذن في الوقت الحالي او انتم كيف تقومون بانشاء المشاريع هل من js ام من ts JS لغة خاصة بالويب أو ذلك ما كانت عليه في باديء الأمر، حاليًا يتم استخدامها في كل شيء تقريبًا، لكن هي ليست من اللغات القوية فيما يتعلق بالاستقرار وتجنب الأخطاء، بسبب عدم وجود معمارية صارمة بها لفرض أنواع محددة للبيانات عند تعريفها، أو حتى التحقق منها وفرض نوع معين للبيانات عند تشغيل المشروع، فأثناء تشغيل المشروع تحدث أخطاء غير متوقعة بسبب عدم توفر ذلك. وفي المشاريع الكبيرة التي يعمل عليها فريق، يصبح الكود المكتوب بـ JS معقدًا وصعب الفهم، أي بدون TS فأي مبرمج جديد ينظر إلى دالة مثل processData(data)، سيتساءل ما هو شكل data؟ هل هو كائن object؟ ما هي خصائصه؟ هل هو مصفوفة array؟ أم رقم؟ سيضطر لقراءة الكود بالكامل أو تتبعه ليفهم. بالتالي منذ سنوات قليلة أصبحت TS هي اللغة الأساسية لتطوير مشاريع جافاسكريبت، ومتوقع منك أن تكون متقن لها بنسبة جيدة. ستجد تفصيل هنا: اقتباس
السؤال
Zen Eddin Allaham
لقد جربت كود في JavaScript ولقد عمل بشكل طبيعي وجربته ايضاً في TypeScript ظهر خطأ لماذا
5 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.