TS1039: Initializers در زمینه محیطی مجاز نیستند

TypeScript یک ابر مجموعه قدرتمند جاوا اسکریپت است که تایپ استاتیک، رابط ها و سایر ویژگی ها را برای بهبود تجربه توسعه اضافه می کند. به عنوان توسعهدهندگان، ما میتوانیم انواع را تعریف کنیم، از رابطها استفاده کنیم و از enums برای ایجاد برنامههای قابل نگهداری و قویتر استفاده کنیم. در این مقاله، خطای خاصی که ممکن است در TypeScript با آن مواجه شوید را بررسی خواهیم کرد: TS1039: Initializers در زمینه محیطی مجاز نیستند.
انواع در TypeScript چیست؟
انواع روشی برای تعیین نوع داده ای است که یک متغیر می تواند نگه دارد. آنها مکانیزمی را برای اطمینان از اینکه کد شما قابل پیش بینی تر است و کمتر مستعد خطا است ارائه می دهند. به عنوان مثال، اگر می خواهید یک متغیر یک عدد باشد، می توانید از سیستم نوع TypeScript برای اعمال آن استفاده کنید:
let age: number = 25; // `age` is of type number
خطا: TS1039 – به چه معناست؟
خطا TS1039: Initializers در زمینه محیطی مجاز نیستند زمانی در TypeScript ایجاد میشود که شما سعی میکنید یک مقدار اولیه (مقدار) برای یک متغیر، ثابت یا حتی یک ویژگی کلاس در یک فایل اعلان یا متنی که در نظر گرفته شده است محیط باشد، ارائه دهید. به عبارت سادهتر، اگر انواع یا واسطها را به گونهای تعریف میکنید که قرار است یک شکل را اعلام کند و مقادیر خاصی را ارائه ندهد، انجام این کار منجر به این خطا میشود.
درک زمینه های محیطی
زمینههای محیطی معمولاً در فایلهای اعلامیه (فایلهایی با a .d.ts
پسوند)، که در آن انواع و رابطهایی را که در مکانهای دیگر وجود دارند (مانند کتابخانههای جاوا اسکریپت) را اعلام میکنید. در این زمینه ها، آیتم ها به گونه ای تعریف می شوند که تایپ اسکریپت از آنها مطلع باشد اما آنها را نمونه سازی نکند. در اینجا نمونه ای از اعلان محیط آورده شده است:
declare const myConstant: number; // This is fine
با این حال، اگر سعی کنید یک مقدار به آن اختصاص دهید:
declare const myConstant: number = 10; // This causes TS1039: Initializers are not allowed in ambient contexts
مثال کد منجر به خطا
در اینجا یک مثال خاص است که می تواند منجر به خطای TS1039 شود:
// This will cause TS1039
declare interface User {
name: string = "John"; // Error: TS1039: Initializers are not allowed in ambient contexts
}
در این مورد، ما سعی می کنیم یک مقدار پیش فرض را برای name
در یک رابط، که در زمینه محیط TypeScript مجاز نیست.
نحوه تعمیر TS1039: Initializers در زمینه محیطی مجاز نیستند
برای رفع این خطا، کافی است مقدار اولیه را از اعلان خود حذف کنید. در عوض، فقط تعریف نوع را ارائه دهید:
// Correct usage
declare interface User {
name: string; // No initializer
}
مهم دانستن
-
اعلامیه های محیطی: اینها اعلان هایی هستند که شکل یک متغیر یا یک ماژول که در جای دیگر وجود دارد TypeScript را ارائه می دهند.
-
آغازگرها: اینها مقادیری هستند که به متغیرها نسبت داده می شوند. در زمینه های محیطی، آنها نباید وجود داشته باشند.
-
استفاده از
declare
:declare
کلمه کلیدی برای نشان دادن اینکه این متغیر یا نوع در جای دیگری وجود دارد و نیازی به تعریف در اینجا ندارد به TypeScript استفاده می شود. -
فایل های .d.ts: این فایل ها به طور خاص برای ارائه انواع برای کتابخانه های جاوا اسکریپت بدون ارائه تعاریف هستند.
-
از تخصیص مقادیر خودداری کنید: به یاد داشته باشید، در زمینه های محیطی، فقط می توانید اطلاعات نوع را ارائه دهید، نه مقادیر اولیه.
سوالات متداول در مورد TS1039
-
TS1039 چیست؟
- این خطایی است که زمانی رخ می دهد که شما سعی می کنید یک متغیر یا ویژگی را در یک زمینه محیطی مقداردهی اولیه کنید.
-
چگونه می توانم از این خطا جلوگیری کنم؟
- اطمینان حاصل کنید که فقط انواع را اعلام می کنید و مقادیر اولیه را در آن ارائه نمی کنید
.d.ts
فایل ها
- اطمینان حاصل کنید که فقط انواع را اعلام می کنید و مقادیر اولیه را در آن ارائه نمی کنید
-
آیا می توانم از مقداردهی اولیه در جای دیگری استفاده کنم؟
- بله، مقداردهی اولیه در کد TypeScript معمولی، خارج از اعلانهای محیط، خوب هستند.
-
معمولاً در کجا با زمینه های محیطی مواجه می شوم؟
- شما معمولاً در فایلهای اعلان TypeScript با زمینههای محیطی مواجه میشوید، که به ارائه ایمنی نوع برای کتابخانههای جاوا اسکریپت کمک میکند.
نتیجه گیری
خطا TS1039: Initializers در زمینه محیطی مجاز نیستند در هنگام کار با اعلانهای نوع و رابطهای TypeScript یک مشکل رایج است. با درک زمینه های محیطی و رعایت قوانین TypeScript در مورد مقداردهی اولیه، می توانید کدهای تمیزتر و بدون خطا بنویسید.
با یادآوری دستورالعملهای مربوط به اعلانها، میتوانید از خطای TS1039 جلوگیری کنید و یک تجربه TypeScript یکپارچه ایجاد کنید. کد نویسی مبارک!