تایپ اسکریپت با افزودن تایپهای استاتیک، سطحی از type safety را در کدی که داریم ارائه میدهد. ما میتوانیم تضمین کنیم که ویژگیها یا توابع خاصی در کد ما وجود دارند و میتوانیم آنها را با تایپهای مورد نظر خود مطابقت دهیم. این کار میتواند میزان خطاهای سمت کلاینت را که ممکن است در وبسایت خود داشته باشیم بسیار کاهش دهد. برای مثال، از ایجاد خطاهای انسانی مانند فراخوانی توابع بر روی آبجکتهای اشتباه جلوگیری میکند. تایپ اسکریپت این کار را با استفاده از تایپهای Collective و Literal انجام میدهد.
در این مقاله قصد داریم تا با تفاوتهای بین تایپهای Collective و Literal در تایپ اسکریپت بیشتر آشنا شویم.
تایپ Collective مفهومی است که اکثر توسعهدهندگانی که با تایپ اسکریپت کار میکنند با آن آشنا هستند. مثلا:
const addOne = (numb: number) => num + 1;
مثال بالا از تایپ Collective استفاده میکند. تایپهای Collective تایپهایی مانند number
، string
، boolean
و یا number[]
هستند.
این تایپها شامل مقدار زیادی از متغیرهای موجود میباشند. به عنوان مثال، تایپ number
میتواند شامل ۱، ۲، ۳، ۴، ۵ … و غیره باشد. اما تایپ اسکریپت تایپهای فرعی را در این تایپ Collective به ما ارائه میدهد که کمی سختگیرانهتر از حالت قبلی هستند.
ما همچنین میتوانیم از مقادیر به عنوان تایپها استفاده کنیم، بنابراین let eleven: 11 = 11
یک کد تایپ اسکریپتی کاملاً معتبر است. این موضوع در ابتدا ممکن است کمی عجیب به نظر برسد اما بسیار پرکاربرد بوده و حتی میتواند خوانایی کدی که داریم را افزایش دهد.
با توجه به این موضوع، میتوانیم شروع به ساخت تایپهایی مانند تایپ enum کرده و به طور خاص تعریف کنیم که فقط میتوانیم مقادیر خاصی را به آن تخصیص دهیم، به عنوان مثال:
type Door = 'open' | 'closed' | 'ajar'
اکنون میتوانیم از تایپ Door
در سرتاسر کد خود استفاده کنیم. تفاوتی که تایپ Door
با تایپ string
دارد این است که این تایپ مجموعهای از مقادیر سختگیرانهتر از آنچه تایپ string
اجازه میداد تا از آنها استفاده کنیم را شامل میشود.
اگر |
در کد بالا مشخص نباشد، یک تایپ Union به حساب میآید و در اصل به معنای OR
میباشد. در نتیجه هر تایپ که با Door
مطابقت دارد فقط میتواند مقادیر open
یا closed
یا ajar
را داشته باشد.
تایپهای Literal زیرمجموعهای از تایپهای Collective در تایپ اسکریپت هستند. یعنی میتوانیم بگوییم که همه تایپهای Literal تایپ Collective هستند، اما همه تایپهای Collective تایپ Literal نمیباشند.
برای این که درک این موضوع سادهتر باشد میتوانیم این مثال را در نظر بگیریم، که تایپ Literal 11
یک تایپ number است اما همه تایپهای number 11
نیستند.
در این مقاله سعی کردیم تا تفاوتهای بین تایپهای Literal و Collective در تایپ اسکریپت را بررسی کنیم. در نهایت، توجه به این نکته لازم است اگر در کد خود نیاز به محدود کردن شدید تایپها داشتیم، توصیه میشود که از تایپهای Literal برای این منظور استفاده کنیم.