Everyday Types
استفاده از انواع داده های پرکاربرد در تایپ اسکریپت
The Primitives
سه تایپ string، number و boolean از همه متداول تر اند و در TypeScript و JavaScript یکسان هستند.
Array
برای تعریف آرایهای از هر نوع مقدار استفاده میشود. انواع روشهای تعریف تایپ از نوع آرایه:
Any
هرگز پیشنهاد نمی شود از این نوع استفاده کنید زیرا هر نوع داده ای را مجاز می کند و عملاً حضور TypeScript را بی تأثیر میکند. این نوع زمانی استفاده می شود که TypeScript نوع داده ای را تشخیص نمی دهد یا نوع داده مدنظر نامشخص است.
اگر نوع متغیر را مشخص نکنید و تایپ اسکریپت هم نتواند نوعش را تخمین (infer) بزند،
کامپایلر بهطور پیشفرض آن را any در نظر میگیرد. برای جلوگیری از این اتفاق، گزینه زیر را در فایل tsconfig.json خود تنظیم کنید:
Type Annotations on Variables
زمانی که از var، const یا let برای تعریف متغیر استفاده می کنیم، می توانیم یک توضیح نوع به آن اضافه کنیم تا نوع متغیر به صورت کاملاً صریح مشخص شود.
زمانی که متغیر را مقداردهی میکنیم، نوع آن به صورت کاملاً صریح برای TypeScript مشخص است. بنابراین در این مواقع نیازی به نوشتن توضیح نوع نیست و انجام این کار باعث طولانیتر شدن کد میشود.
Function
تایپ اسکریپت این امکان را میدهد که نوع پارامتر ها و خروجی های توابع را مشخص کنیم.
Parameter Type Annotations
نوع هر پارامتر را میتوانیم بعد از نام آن مشخص کنیم.
در این تابع، ورودی name از نوع string تعریف شده. بنابراین تایپ اسکریپت انتظار دارد هنگام استفاده از تابع،آرگومان اول را از نوع string پاس دهیم.
Return Type Annotations
در تایپ اسکریپ میتوانید نوع مقداری را که یک تابع برمیگرداند (return میکند)، بعد از پارامتر ها مشخص کنید.
در اغلب موارد نیازی به تعریف نوع بازگشتی به صورت دستی نیست. چون خود تایپ اسکریپت به طور نوع خروجی را از روی مقدار return شده تشخیص(infer) میدهد.
چرا بعضی از برنامهنویسان نوع بازگشتی را مینویسند؟
- برای مستندسازی بهتر کد
- برای جلوگیری از تغییر ناخواستهی نوع بازگشتی در آینده
- یا صرفاً بهعنوان سبک شخصی یا قراردادی در پروژه.
Functions Which Return Promises
مشخص کردن نوع توابعی که خروجی آنها به صورت یک Promise است:
Anonymous Function
TypeScript می تواند نوع ورودی های تابع ناشناس را بسته به موقعیت مورد استفاده تشخیص دهد.
در مثال زیر، TypeScript نوع ورودی name را به دلیل اینکه names آرایهای از رشتهها است و متد forEach هم قرار است که تک تک این رشتهها را به تابع ناشناس ارسال کند، تشخیص میدهد:
Object Types
برای تعریف نوع یک Object کافی است ویژگیها و نوع آنها را فهرست کنید.
در مثال زیر، نوع ورودی pt که یک Object است، در همان زمان تعریف نوشته شده است:
برای جدا کردن پراپرتی(property) میتوان از ,(کاما) یا ;(سمیکالن) استفاده کرد(قرار دادن جدا کننده اختیاری است).
یکی دیگر از روش های تعیین نوع برای Object، استفاده از interface است.
Optional Property
برای ایجاد یک پراپرتی اختیاری، باید بعد از نام پراپرتی و قبل از :، علامت ? را قرار دهیم:
برای استفاده ایمن تر از پارامتر های اختیاری باید آنها را بررسی کنیم که undefined نباشند.
Union Type
تایپ اسکریپت این امکان را میدهد که با استفاده از عملگرها type جدیدی را از ترکیب type های موجود ساخت. یکی از ساده ترین و پرکاربرد ترین روش ها برای ترکیب type ها، union type(نوع ترکیبی) است.
Defining a Union Type
یک Union Type از دو یا چند type دیگر ساخته میشود و نشان میدهد که یک مقدار میتواند یکی از آن type ها باشد.
وقتی یک متغیر از نوع union تعریف میشود، فقط میتوان عملیاتهایی روی آن انجام داد که برای هر یک از اعضای union قابل انجام باشد.
در مثال زیر ورودی id میتواند رشتهای یا عددی باشد. از متدهایی میتوان استفاده کرد که هم برای نوع number و هم string در دسترس باشند.
میتوان قبل از اولین عضو، | گذاشت تا type خواناتر شود:
Working with Union
وقتی متغیری از نوع ترکیبی(union) دارید (مثل string | number)، مقدار ورودی میتواند هر یک از اعضای union باشد. اما تایپ اسکریپت فقط اجازهی استفاده از عملیاتهایی را میدهد که برای تمام اعضای آن union معتبر باشند.
در مثال زیر تایپ اسکریپت اجازه استفاده از متد toUpperCase را نمیدهد چون ممکن است ورودی عدد باشد نه یک رشته:
برای حل این مشکل، باید نوع را محدود(narrow) کنید؛ یعنی به تایپ اسکریپت نشان دهید در هر بخش از کد، دقیقاً کدام نوع مدنظر شماست.
در مثال زیر، تایپ اسکریپت بهطور خودکار متوجه میشود در شاخهی if مقدار از نوع string و در else از نوع number است.
اگر تمام اعضای یک union دارای ویژگی مشترک باشند، میتوانید مستقیماً از آن ویژگی استفاده کنید بدون اینکه type ها را محدود(narrow) کنید.
