برای تسهیل کار با تایپ ها در تایپ اسکریپت امکانات ویژه ای وجود دارد که تایپ اسکریپت آن را utility type مینامد.
شما ممکن است توسعه دهنده سطح مبتدی باشید یا قبلا با تایپ ها کار نکرده باشید و سری به پروژه های ناشناخته گیت هاب بزنید یا در شرکتی که استخدام هستید نگاهی به کد های آن بیندازید و متوجه نشوید معنای این موارد چیست و چرا تایپ ها را درون این ها قرار میدهند مثلا:
Partial<Type>
Required<Type>
Readonly<Type>
Record<Keys, Type>
Pick<Type, Keys>
Omit<Type, Keys>
Exclude<UnionType, ExcludedMembers>
Extract<Type, Union>
این موارد و حتی بیشتر از این ها در این لینک توضیح داده شده اند، اما من سعی دارم مهم ترین utility type ها را که در بالا ذکر کردم با بیانی ساده و قابل فهم در این مقاله توضیح دهم، با فهمیدن utility type ها تایپ اسکریپت لذت بخش تر میشود و آسان تر به نظر میرسد
بی وقفه به سراغ اصل مطلب میرویم :
می دانیم که دو راه اصلی برای تعیین تایپ وجود دارد: Interface , Type
در چند مورد این دو با هم تفاوت و شباهت دارند به دلیل اینکه این مقاله درمورد این نیست به صورت خلاصه از آن رد میشویم ولی میتوانید در مورد این هم تحقیق کنید:
1. هر دو را می توان برای توصیف شکل یک شی یا یک امضای تابع استفاده کرد. اما سینتکس متفاوت است
2. معمولا اینترفیس برای تعریف شکل یک شئ یا فانکشن نوشته می شود اما در تایپ شما میتوانید به صورت primitive یا tuple یا union هم از آن استفاده کرد پس گستره استفاده بالایی دارد
3. نحوه Extend شدن این دو متفاوت است اما می توانند هم دیگر را Extend کنند
4. نحوه implement شدن هر کدام برای کلاس ها شبیه هم هستند
5. برخلاف تایپ ها ، اینترفیس ها میتوانند چندین بار تعریف شوند و به طور جالبی با هر بار تعریف شدن با یکدیگر مرج میشوند
اگر شما هم موارد دیگری میدانستید داخل کامنت ها ذکر کنید من این مقاله را آپدیت میکنم
حالا بریم سراغ اصل مطلب utility type ها با کمی تمرین میتوانید به خوبی به تایپ ها و نحوه کار با آنها مسلط شوید:
Partial<Type>
تمام تایپ و پراپرتی های آن را به صورت Optional در نظر میگیرد ، مثلا به این شکل:
به این مثال دقت کنید:
شما با این روش میتوانید در بعضی موارد مشکل خود را حل کنید مثلا زمان دریافت پارامتر های ورودی یک فانکشن یا وقتی که میخواهید آبجکت خود را از یک تایپ بنویسید اما همه ی ورودی های تایپ را احتیاج ندارید
Required<Type>
برعکس مثال بالا یعنی پارشیال، Required تمام فیلد ها به صورت اجباری در نظر میگیرد حتی فیلد هایی که به صورت دستی اختیاری تعریف شده اند در مثال پایین فانکشن تعریف شده به ران تایم ارور میخورد زیرا تمام الزامات آن به عنوان آرگومان ارسال نشده
Readonly<Type>
در زبان جاوااسکریپت کلمه کلیدی const باعث ایجاد یک ثابت میشود و شما دیگر نمیتوانید مقدار دیگری را به این ثابت کنید
اما در رفرنس تایپ ها یا مثلا حالت آبجکت این متفاوت است شما میتوانید مقدار داخلی آبجکت را تغییر دهید
در utility type به نام Readonly شما میتوانید جلوی این مسئله را بگیرید به طوری که مقادیر داخل آبجکت تغییر نکند
Record<Keys, Type>
این مورد یک مقدار تمرین بیشتری میخواهد
زمانی که شما یک دیتا تجمیع شده دارید ومی خواهید به ازای key , value به آن تایپ دهید می توان از رکورد استفاده کنید بهترین مثالی که از این تایپ پیدا کردم مثال خود سایت تایپ اسکریپت بود
در مثال بالا ما با آبجکتی از آبجت ها طرف هستیم و میخواهیم به آن تایپ بدهیم، تمام کلیدهای آبجکت را در یک union type به نام CatName ذخیره شده است و یک اینترفیس برای value این مثال به نام CatInfo تعبیه شده است و برای تایپ دهی به دیتا های تجمیع شده از Record Utility Type استفاده شده است
Pick<Type, Keys>
یک utility ساده است ، زمانی که شما یک تایپ داری و میخواهید تایپ جدیدی بسازید که بعضی از تایپ های اول را به اصطلاح pick کنید. ساده وکاربردی
Omit<Type, Keys>
این یکی تقریبا می توان گفت بر عکس قبلی است در اینجا شما تایپی را دارید و میخواهید تایپ جدیدی بسازید و میخواهید تمام موارد تایپ اول را داشته باشید به غیر از بعضی موارد خاص
Exclude< UnionType, ExcludedMember >
در این تایپ شما میخواهید از union type بعضی موارد را کم کنید
Extract<Type , Union >
در این تایپ شما مواردی که احتیاج دارید را از یونیونق تایپ اول بیرون میکشید
خوب به انتهای مقاله رسیدیم این 8 تا به نظر من مهم ترین موارد در utility type ها است که در پروژه های مختلف بیشتر به چشم میخورد برای مشاهده لیست کامل utitlity type ها به این لینک مراجعه کنید
در صورتی که این مقاله برای شما مفید بود
🙏🙏🙏 LIKE , SHARE, COMMENT, SUBSCRIBE🙏🙏🙏