نحوه تعریف متغیرها در تایپ اسکریپت بر تغییر یا عدم تغییر آنها تأثیر میگذارد. در این مقاله قصد داریم تا تاثیر استفاده از let و const، برای تعریف متغیر در تایپ اسکریپت را باهم بررسی کنیم.
هنگامی که برای تعریف یک متغیر از کلمه کلیدی let استفاده میکنیم، این متغیر تعریف شده قابل تغییر است و میتوانیم آن را مجددا تخصیص دهیم.
تایپ AlbumGenre
را در نظر میگیریم. ترکیبی از مقادیر literal است که نشان دهنده ژانرهای ممکن برای یک آلبوم میباشد:
type AlbumGenre = "rock" | "country" | "electronic";
با استفاده از let، میتوانیم یک متغیر albumGenre
تعریف کنیم و مقدار rock
را به آن اختصاص دهیم. سپس میتوانیم albumGenre
را به تابعی که انتظار یک AlbumGenre
را دارد، ارسال کنیم.
let albumGenre = "rock"; const handleGenre = (genre: AlbumGenre) => { // ... }; handleGenre(albumGenre); Argument of type 'string' is not assignable to parameter of type 'AlbumGenre'.
از آنجایی که let هنگام تعریف متغیر استفاده میشود، تایپ اسکریپت میداند که مقدار آن را میتواند بعداً تغییر دهد. در این مثال، albumGenre
را به عنوان یک string
به جای تایپ literal خاص rock
استنباط میکند. ما میتوانیم این کار را در کد خود انجام دهیم:
albumGenre = "country";
بنابراین، یک تایپ گستردهتر را استنباط میکند تا بتواند متغیر در حال تخصیص مجدد را تطبیق دهد.
میتوانیم با اختصاص یک تایپ خاص به let خطای بالا را برطرف کنیم:
let albumGenre: AlbumGenre = "rock"; const handleGenre = (genre: AlbumGenre) => { // ... }; handleGenre(albumGenre); // no more error
اکنون، میتوانیم albumGenre
را دوباره اختصاص دهیم، اما فقط به مقداری که عضو union AlbumGenre
باشد. بنابراین، پس از ارسال به handleGenre
، دیگر خطایی نشان نخواهد داد.
اما برای حل این مشکل، راه حل جالب دیگری هم وجود دارد.
هنگامی که از const برای تعریف متغیر استفاده میکنیم، آن متغیر تغییرناپذیر میشود و به این ترتیب، نمیتوانیم آن را مجددا تخصیص دهیم. وقتی که تعریف متغیر را به استفاده از const تغییر میدهیم، تایپ اسکریپت تایپ آن را با دقت بیشتری استنتاج میکند:
const albumGenre = "rock"; const handleGenre = (genre: AlbumGenre) => { // ... }; handleGenre(albumGenre); // No error
در این مثال دیگر خطایی در انتساب وجود ندارد، و تایپ اسکریپت albumGenre
را به عنوان تایپ literal rock
استنباط میکند.
اگر بخواهیم مقدار albumGenre
را پس از تعریف آن به عنوان const تغییر دهیم، تایپ اسکریپت یک خطا به ما نشان میدهد:
albumGenre = "country"; Cannot assign to 'albumGenre' because it is a constant.
تایپ اسکریپت به منظور جلوگیری از خطاهای احتمالی زمان اجرا، رفتار جاوااسکریپت با const را منعکس میکند. وقتی متغیری را با const تعریف میکنیم، تایپ اسکریپت آن را به عنوان تایپ literalای که مشخص کردهایم استنتاج میکند.
بنابراین، تایپ اسکریپت از نحوه عملکرد جاوااسکریپت به نفع خود استفاده میکند. این موضوع اغلب ما را تشویق میکند که هنگام تعریف متغیرها در تایپ اسکریپت به جای let از const استفاده کنیم، زیرا کمی سختگیرانهتر میباشد.
۵۰ درصد تخفیف ویژه پاییز فرانت کست تا پایان هفته
کد تخفیف: atm