سلام.
امروز برای سومین قسمت از مهاجرت به تایپاسکریپت، قصد داریم تا راجب به سایر تایپ ها صحبت کنیم. در قسمت قبل همراه با معرفی تایپ ها سعی کردیم برخی از اونها رو با مثال های عملی توضیح بدیم و درک کنیم که با استفاده از تایپ ها ، تایپاسکریپت چگونه به کمک ما میاد و به روند توسعه، سرعت میبخشه.
میتونید در قسمت اول از مهاجرت، راجب به دلیل مهاجرت و همچنین مراحل اولیه ی نصب زبان تایپاسکریپت، مطالعه کنید و در قسمت دوم از مهاجرت میتونید بحث تایپ هارو به عنوان اولین بحث از دنیای تایپاسکریپت مطالعه کنید.
در جلسه ی قبل تونستیم تا بخش آرایه ها توضیح بدیم و بررسی کنیم اما این قسمت رو به بررسی و معرفی ادامه ی تایپ ها اختصاص دادیم.
چندتایی یا Tuple یک نوع از آرایه ها هستند که تعداد و نوع Elements مشخصی دارند. مثلا فرض کنید شما یک آرایه از اطلاعات شخصی خود دارید و اطمینان دارین که Element اول اون آرایه یک String هست و اسم شمارو توی خودش نگه داشته و خانه ی دوم اون آرایه یک عدد است که سن شمارو به صورت Number در بر داره. به مثال زیر از داکیومنت خود سایت تایپاسکریپت دقت کنید:
به نحوه ی معرفی یک چندتایی دقت کنید. اگر به چندتایی تعریف شده در عکس بالا، داده ای به غیر از رشته و عدد ( با رعایت ترتیب ) داده شود، دچار خطا شده و جلوی کامپایل کد شما گرفته میشود.
#درگوشی : اگر مرتب دچار تغییر در داده های چندتایی شدید، یا داده از سمت سرور با تغییرات همراه بود، میتوانید از یک آرایه با نوع Any استفاده کنید، که تایپاسکریپت بیخیال بررسی داده های درون آرایه شود
با یک حرکت زیبا از سمت تایپاسکریپت روبرو هستیم به اسم Enum type.
اما Enum-ها در تایپاسکریپت دقیقا مشابه با Enum-ها در سایر زبان های شیء گرا هستند که امکان تعریف مجموعه از ثابت هارو به ما میدن. بیاین واضح تر اونهارو توی جاوااسکریپت بررسی کنیم:
فرض کنید شما یه داده مشابه با عکس بالا رو از سرور دریافت کردید و نیاز دارید تا بر اساس Role هر کاربر، بهش دسترسی های متفاوتی رو بدین. مثلا مدیر سیستم میتونه هر کاری انجام بده و نویسنده فقط میتونه مقالات اون سیستم رو بنویسه. حالا فرض کنیم شرط زیر برای این هست که بررسی کنیم کاربر چه دسترسی هایی دارد. عکس زیر رو بررسی کنید:
به نظر شما کد console.log() برای کاربر با آیدی 100 اجرا میشه ؟ جواب خیر است. چرا ؟ چون به صورت سهوا ما حرف n از 'SYSTEM_ADMIn' رو به صورت حرف کوچک نوشتیم. ولی اگر بیایم پیش خودمون در نظر بگیریم که میتوان چندین ثابت در نظر گرفت و همیشه مقادیر هماهنگ شده با برنامه نویسان سمت سرور را در ثابت ها ذخیره کرد، میتوان از بروز این خطاها جلوگیری کرد. مثال زیر رو دقت کنید:
دقیق کد بالارو مطالعه کنید. ما اومدیم با تعریف نقش ها (Roles) به صورت متغیرهای ثابت در بالای کد، ضریب به وجود اومدن خطارو کاهش دادیم و هرجا نیاز باشه از اسم متغییر استفاده میکنیم. حالا دقت کنید ممکنه اگر شما بعد از یکسال نیاز به بروزرسانی کد داشته باشید و سمت سرور به شما اعلام کنه از این به بعد Role هارو بجای رشته، به صورت عدد برای شما ارسال میکنیم و شما هیچ ثابتی در نظر نگرفته باشید و مستقیم از رشته ی SYSTEM_ADMIN استفاده کرده باشید، تصور کنید چقدر نیاز هست جای به جای اپلیکیشن خودتون رو Refactor کنید. باید برید و هرجایی از رشته ی SYSTEM_ADMIN استفاده کردید تغییر بدید به مثلا عدد 1، ولی اگر ثابت هارو تعریف کرده باشید فقط کافیه مقدار ثابت ADMIN_ROLE رو به 1 تغییر بدید و به این ترتیب نیاز نیست کل کد رو تغییر بدید. الان درک کردیم یک مجموعه از ثابت ها، چرا میتونند بر پایداری کد ما تاثیر مثبت داشته باشند.
مثال بالا رو در تایپاسکریپت بررسی کنیم با این تفاوت که فرض کنیم ما و سمت سرور توافق کردیم اگر کاربر مدیر سیستم بود، داده ی ارسالی از سمت سرور عدد 10 باشد. اگر کاربر نویسنده بود، داده ی ارسالی رشته ی 'Author' باشد و اگر کاربر بیننده بود داده ی ارسالی عدد 100 باشد. ( امیدوارم هیچوقت با بکندی به این بهم ریختگی روربرو نشید ولی ما بدترین و بی نظم ترین داده رو بررسی کردیم ). عکس زیر رو مشاهده کنید:
دقت کنید:
enum Role { ADMIN = 1, AUTHOR, GUEST }; // ADMIN === 1 | AUTHOR === 2 | GUEST === 3
نوع Any به شما این امکان را میدهد که متغییر خود را به صورت Dynamic Type معرفی کنید. به مثال زیر دقت کنید:
نوع Void یک مقدار شبیه به نوع Any است، هنگامی که برای یک تابع استفاده شود، میتواند نشانه گر این باش که این تابع وظیفه ی انجام یک سری عملیات را دارد ولی چیزی را بازگشت نمیکند. مثال زیر رو دقت کنید:
همچنین برای استفاده از نوع Void، میتوانید مقادیر Null و Undefined رو برای اون متغیر فقط اعمال کنید البته دقت کنید اگر برای یک متغییر نیاز دارید از Null استفاده کنید باید در فایل کانفیگ تایپ اسکریپت، `strictNullChecks` را مقدار دهی کنید که در جلسات بعدی به طور کامل راجب کانفیگ اولیه ی پروژه بحث خواهیم کرد.
در تایپاسکریپت نوع Null و Undefined نیز مطرح هستند و بسیار شبیه به Void میتوان آنهارا معرفی کرد. به طور پیشفرض، Null و Undefined یک Sub Type از سایر Typeها هستند، مثلا میتوانید Null رو به متغیری که از نوع Number هست، نسبت دهید. مثال زیر را ببینید:
استفاده نوع Never، بیشتر در زمانهایی است که Function یا Arrow function برای انجام یک عملیات یا بروز یک خطا است و قصد به Return مقداری را ندارد. مثلا شما یک تابع را در نظر بگیرید که وظیفه ی Error exception را دارد و میتواند از نوع Never باشد. برای مثال، تکه کد زیر رو مشاهده کنید:
و یک نکته از مستندات سایت تایپ اسکریپت برای نوع Never:
Thenever
type is a subtype of, and assignable to, every type; however, no type is a subtype of, or assignable to,never
(exceptnever
itself). Evenany
isn’t assignable tonever
.
محمد گلدست / هفدهم فروردین ماه ۱۳۹۹.