القراء مثلك يساعدون في دعم MUO. عند إجراء عملية شراء باستخدام الروابط الموجودة على موقعنا ، فقد نربح عمولة تابعة. اقرأ أكثر.

يحدث تضارب التسمية عندما يستخدم مكونان أو أكثر من مكونات الكود نفس الاسم لمتغير أو وظيفة أو فئة. إنها شائعة في المشاريع الكبيرة حيث يعمل العديد من الأشخاص على نفس مصدر الشفرة. يمكنهم أن يجعلوا من الصعب تحديد مكون الكود المسؤول عن الأخطاء.

باستخدام مساحات الأسماء ، يمكنك تنظيم وإدارة التعليمات البرمجية الخاصة بك بحيث تكون مجموعات المكونات ذات الصلة تحت معرف مشترك. سيؤدي ذلك إلى التخفيف من مخاطر تعارض التسمية.

إنشاء Namespace

يمكنك إنشاء مساحات أسماء في TypeScript باستخدام امتداد مساحة الاسم كلمة رئيسية. اتبعه بمعرف لتسمية مساحة الاسم وكتلة محاطة بأقواس معقوفة. البنية مشابهة لتلك التي تستخدمها إنشاء فصل دراسي في JavaScript.

على سبيل المثال:

مساحة الاسم مثال {}

يمكنك بعد ذلك التصريح عن أعضاء مساحة الاسم - المتغيرات والوظائف والفئات - داخل كتلة مساحة الاسم:

مساحة الاسم مثال {
يصدّروظيفةفو(): فارغ{
وحدة التحكم.سجل("هذه دالة داخل مثال مساحة الاسم");
}

يصدّرفصل حاجِز {
ملكية: خيط;

البناء(ملكية: خيط) {
هذا.property = خاصية ؛
}
}

يصدّرمقدار ثابت باز = "هذا متغير مساحة الاسم"
}

instagram viewer

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

يمكنك الوصول إلى جميع الأعضاء المتاحين للجمهور في مساحة الاسم من خلال استدعاء اسم عضو مساحة الاسم باستخدام تدوين النقطة:

example.foo () ؛ // هذه دالة داخل مثال مساحة الاسم

مقدار ثابت شريط = جديد مثال. حاجِز("خيط");
وحدة التحكم.log (bar.property) ؛ // خيط

وحدة التحكم.log (example.baz) ؛ // هذا متغير مساحة الاسم

مساحات الأسماء المتداخلة

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

على سبيل المثال:

مساحة الاسم مثال {
يصدّرمقدار ثابت property_1 = "فو";

يصدّرمساحة الاسم حاجِز {
يصدّرمقدار ثابت printFoo = وظيفة () {
وحدة التحكم.log (property_1) ؛
};
}

يصدّرمساحة الاسم باز {
يصدّرفصل فو {
ملكية: خيط;

البناء(ملكية: خيط) {
هذا.property = خاصية ؛
}
}
}
}

يوفر مقطع التعليمات البرمجية أعلاه مثالاً لمساحة اسم متداخلة. ال مثال مساحة الاسم هي مساحة اسم المستوى الأعلى ، وتحتوي على حاجِز مساحة الاسم و باز مساحة الاسم.

يمكنك الوصول إلى الخصائص في مساحة اسم متداخلة باستخدام تدوين النقطة الذي يتبع الهيكل الهرمي الذي أنشأته.

على سبيل المثال:

وحدة التحكم.log (Example.property_1) ؛ // فو
مثال. Bar.printFoo () // فو
مقدار ثابت فو = جديد مثال. باز. فو ("مثال")

يصل رمز المثال هذا إلى كل عضو في مساحة الاسم عبر مساحة الاسم الأصل. قد يؤدي الوصول إلى خاصية ما مباشرةً ، بدلاً من الوصول إليها من خلال مساحة الاسم الأصل الخاصة بها ، إلى حدوث خطأ:

example.printFoo ()
// خطأ TS2339: الخاصية "printFoo" غير موجودة في النوع "typeof Example"

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

الأسماء المستعارة Namespace

الاسم المستعار لمساحة الاسم هو اسم مختصر يُعطى لعضو مساحة الاسم ، مما يسهل الرجوع إليه.

يمكنك إنشاء اسم مستعار لمساحة الاسم باستخدام امتداد يستورد الكلمة الأساسية متبوعة بالاسم الذي تريد تعيينه للاسم المستعار. ثم قم بتعيين ملف يستورد الكلمة الأساسية والاسم المستعار لعضو مساحة الاسم.

على سبيل المثال:

مساحة الاسم سيارة {
يصدّرمساحة الاسم تسلا {
يصدّرفصل موديل X {
يخلق(): خيط {
يعود"تم إنشاء النموذج X"
}
}
}

يصدّرمساحة الاسم تويوتا {
يصدّرفصل كامري {}
}

يصدّرمساحة الاسم معقل {
يصدّرفصل موستانج {}
}
}

// إنشاء الاسم المستعار
يستورد تسلا = سيارة. تسلا

مقدار ثابت modelX = جديد تسلا. ModelX ()
modelX.create () // تم إنشاء النموذج X

ينشئ هذا المثال اسمًا مستعارًا لـ سيارة. تسلا مساحة الاسم. يمكنك استخدام هذا الاسم المستعار للوصول إلى خصائص تسلا مساحة الاسم ، مثل فئة ModelX ، بسهولة أكبر.

استخدام مساحات الأسماء في ملفات متعددة

لاستخدام مساحة اسم في ملف مختلف ، يجب عليك استيراده. يختلف استيراد مساحات الأسماء عن استيراد المتغيرات والوظائف والفئات وما إلى ذلك. اعتمادا على مشروعك نظام الوحدة، يمكنك استيرادها باستخدام إما ملف يتطلب أو ال يستورد كلمة رئيسية.

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

على سبيل المثال:

// main.ts

///
example.foo ()

يستخدم هذا المثال توجيه الشرطة المائلة الثلاثية داخل a main.ts ملف. التوجيه يشير إلى index.ts الذي يحتوي على ملف مثال مساحة الاسم. بدون الاستيراد ، تتوفر مساحة الاسم فقط داخل نفس الملف الذي يحددها.

بعد الرجوع إلى index.ts ملف ، يمكنك الوصول إلى ملف مثال مساحة الاسم وأعضائها المتاحين للجمهور. على سبيل المثال ، يمكنك الاتصال بـ فو طريقة على مثال مساحة الاسم.

بمجرد استخدام ملفات متعددة ، ستحتاج إلى التأكد من أن TypeScript يجمع ويحمل كل التعليمات البرمجية الضرورية. يمكنك القيام بذلك عن طريق توصيل الإخراج من برنامج التحويل البرمجي TypeScript باستخدام الامتداد الملف خيار. سيؤدي ذلك بعد ذلك إلى تجميع جميع ملفات الإدخال في ملف إخراج JavaScript واحد. الصيغة العامة لتشغيل المترجم كما يلي:

tsc - ملف 

يستبدل باسم ملف JavaScript الهدف الخاص بك. يستبدل باسم ملف TypeScript الذي يحتوي على توجيه مائل ثلاثي.

على سبيل المثال:

tsc --outFile index.js main.ts

سيقوم هذا الأمر بتجميع محتويات ملف main.ts ملف ، إلى جانب جميع الملفات المشار إليها بواسطة التوجيه الثلاثي المائل ، في ملف index.js ملف.

بدلاً من ذلك ، يمكنك تحديد كل ملف على حدة:

tsc - ملف 

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

هل يجب عليك استخدام مساحات الأسماء أو الوحدات النمطية؟

على الرغم من عدم إهمال مساحات الأسماء ، يوصى غالبًا بتنظيم وإدارة الشفرة باستخدام وحدات ES6. الوحدات النمطية أسهل في الحفاظ عليها وإدارتها ويمكنك توسيع نطاقها عبر ملفات متعددة.

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

في النهاية ، سيعتمد الاختيار بين مساحات الأسماء والوحدات النمطية على الاحتياجات والمتطلبات المحددة لمشروعك ، حيث يوفر كلاهما طريقة قيمة لتنظيم وإدارة التعليمات البرمجية في TypeScript.