چگونه یک متغیر جهانی را در React Native با تایپاسکریپت تنظیم کنیم؟


من میخواهم یک متغیر سراسری در React Native تنظیم کنم. این ضروری است و به نظر میرسد تنها گزینه در مورد استفاده خاص من باشد. من از تایپاسکریپت در پروژهام استفاده میکنم. مشکل این است که تایپاسکریپت وقتی چیزی مثل global.foo=bar; را تنظیم میکنم، با خطای "Property 'foo' does not exist on type 'typeof globalThis'." شکایت میکند. من سعی کردهام یک فایل اعلان به این شکل ایجاد کنم -

declare module NodeJS {
    export interface Global {
        foo: any;
    }
}

و همچنین با برخی روشهای دیگر که به صورت آنلاین برای React Native یا NodeJS پیدا کردم. هیچکدام به نظر نمیرسد که کار کنند. آیا کسی ایدهای دارد چرا این کار نمیکند؟ من ماژولهای دیگر را به همان روش اعلام کردهام و همه آنها کار میکنند جز ماژول سراسری. چرا؟

پاسخ شماره ۱

میتوانی تقلب کنی و این کار را انجام دهی:

(global as any).foo = bar;

و زمانی که نیاز به دسترسی به آن دارید، همچنین از (global as any).foo استفاده کنید

بدیهی است که این یک کار نادرست هم از نظر ایمنی نوع و هم از نظر آلوده کردن فضای نام جهانی است، اما شما گفتهاید که این تنها راه برای مورد شما بوده است...

پاسخ شماره ۲

به این پاسخ نگاه کن.

به طور خلاصه، به نظر میرسد از TypeScript 3.4 اوضاع تغییر کرده است، اکنون از globalThis استفاده میشود و با آن متغیر سراسری NodeJS نیز استفاده میشود.

جواب برای من کاملاً ساده بود، در یک فایل *.d.ts:

declare var foo: any

که در واقع منطقی به نظر میرسد؛ شما در حال اعلام یک نوع سراسری همانطور که اگر یک متغیر سراسری بود، عمل میکردید، هستید.