تايب سكريبت - ما هي التصريحات المحيطية
لقد رأيت الكثير من المقالات التي تذكر إعلانات المحيط. على سبيل المثال هذا المقال. ما هي؟ هل يمكن لشخص ما أن يقدم مثالاً؟ هل إعلان المحيط هو إعلان لنوع تم إنشاؤه خارج ملفات تايب سكريبت الموجودة ولكن يُستخدم في هذه الملفات؟ هل كل الإعلانات محیطية؟
كما أفهم، فإن إعلانات البيئة لا تنتج أي كود جافاسكريبت ويتم تعريفها باستخدام الكلمة المفتاحية declare. هل هذه هي الحالة الوحيدة لإعلانات البيئة أم أن هناك حالات أخرى؟
الإجابة رقم 1
نعم، الإعلانات المحيطة تتيح لك إخبار المترجم عن المتغيرات/الدوال/إلخ الموجودة.
على سبيل المثال، لنفترض أنه في صفحة الويب الخاصة بك تستخدم مكتبة تضيف متغيرًا عالميًا، لنفترض أن اسمه ON_READY وأنه مرجع لدالة.
تحتاج إلى تعيين دالة له، لذا ستقوم بشيء مثل:
ON_READY = () => {
console.log("ready!");
...
};
سيشتكي المُترجِم من أن:
لا يمكن العثور على الاسم 'ON_READY'
لذلك تستخدم إعلان محيطي لإبلاغ المترجم بأن هذا المتغير موجود ونوعه هو:
declare var ON_READY: () => void;
الآن لن يشتكي من عدم العثور عليه.
تحرير
عند استخدام الكلمة المفتاحية declare فهي دائمًا محيطية، تمامًا كما هو مذكور في المقالة التي ربطتها:
حيث تريد تعريف متغير قد لا يكون قد نشأ من ملف TypeScript
الإعلانات غير المحيطية هي مجرد إعلانات عادية للمتغيرات/الدوال:
let x: number;
const y = "string";
var a = () => { console.log("here"); }
الإجابة رقم 2
جاء هذا من أحد المساهمين في دليل TypeScript (مع الإشارة أدناه).
الوحدة
الوحدة هي ملف يحتوي على import أو export على المستوى الأعلى، كما هو محدد في مواصفة ES6، وكان يُشار إليها سابقًا باسم "الوحدة الخارجية"
النص البرمجي
البرنامج النصي هو ملف ليس "وحدة".
ينبغي علينا استخدام هذا بدلاً من "global"، حيث أن "global" نسبي بالنسبة للاستيراد؛ بينما "script" يتعلق بمحتوى الملف، وليس بكيفية استخدامه. وهذا أيضًا متوافق مع مصطلحات ES6.
البيئي
أي شيء لا يوجد له تنفيذ، على سبيل المثال:
- إعلان متغير بيئي =>
declare var $: any - إعلان الصف المحيطي =>
declare class C { foo(); }، إلخ..
يمكن أن يكون الوحدة أيضًا محيطية؛ لذا
- «الوحدة المحيطة» هي ملف .d.ts يحتوي على
importأوexportعلى المستوى الأعلى. - إعلان الوحدة "ambient module declaration" هو شيء بالشكل
declare module "foo" { ... }
النسبة:
تم كتابة هذا بواسطة mhegazy مع بعض التصحيحات الطفيفة في القواعد الإملائية/التهجئة/الحروف الكبيرة مني.
وجدت ذلك من خلال تعليق أدلى به @Paleo في إجابة مختلفة ضمن هذا المنشور. اعتقدت أنه جيد جدًا لدرجة أنه يستحق المشاركة كإجابة مستقلة.
