قابلیت های کمتر شناخته شده TypeScript — راهنمای کاربردی
TypeScript در طی چند سال گذشته به روشی محبوب برای نوشتن اپلیکیشنهای جاوا اسکریپت تبدیل شده است. این زبان قابلیتهای گستردهای دارد و میتواند کارهای زیادی انجام دهد. در ادامه فهرست کوتاهی از قابلیتهای نادر تایپاسکریپت که احتمالاً نمیشناسید و کمک زیادی به فرایند توسعه اپلیکیشنها میکنند را معرفی میکنیم.
اعداد خوانا
شما میتوانید اعدادی را بنویسید که دارای کاراکتر زیرخط هستند. برای نمونه 1000000000 را میتوان به صورت 000_000_000_1 نوشت. این عدد در جاوا اسکریپت به صورت یک عدد معمولی کامپایل میشود، اما این ساختار باعث میشود که خوانایی آن آسانتر شود. کاراکتر زیرخط میتواند هر جایی در عدد قرار گیرد و حتی 25 را به صورت ۵_2 میتوان نوشت. کاربرد جالب دیگر این ساختار در حسابهای مالی است. 2545 را میتوان به صورت 25.45$ در اپلیکیشن نمایش داد و آن را در تایپاسکریپت میتوان به صورت 45_25 نوشت.
متغیرهای تعریف شده
اگر بدانید که متغیری تعریف شده است، میتوانید یک کاراکتر (!) پس از آن اضافه کنید تا بدون بررسی اولیه این که آیا مقدار undefined است یا نه به آن دسترسی داشته باشید. برای نمونه ممکن است props را با استفاده از یک دکوراتور مانند (inject(router@ یا (inject(store@ به کامپوننت ریاکت تزریق کنید. سپس میتوانید this.props.store!.someValue را حتی در صورتی که تعریف store به صورت store?: Store باشد بنویسید. مراقب باشید که از این قابلیت بیش از حد استفاده نکنید، اما مواردی وجود دارند که این قابلیت کارآمد خواهد بود. همواره از یک گزاره if نیز استفاده کنید، اما این گزینه در مواردی که میدانید گزاره if صحیح است، ممکن است طول بیشتری داشته باشد.
متغیر از نوع never
شما میتوانید متغیری برای داشتن نوع never تعیین کنید. این بدان معنی است که نمیتوان آن را به چیز دیگری تعیین کرد. فایده این کار چیست؟ یکی از جاهایی که این امکان مفید است در زمان بررسی این نکته است که آیا همه احتمالهای گزاره switch مدیریت شدهاند یا نه. برای نمونه:
1export function unreachable(x : never) {
2 throw new Error(`This should be unreachable! but got ${x}`)
3}
4const someFunction = (temperature: 'hot' | 'cold' | 'warm') => {
5 switch (temperature) {
6 'hot': console.log("it's hot outside!"); break;
7 'cold': console.log("it's cold outside!"); break;
8 default: unreachable(temperature);
9 }
10}
کد فوق یک خطای زمان کامپایل ایجاد خواهد کرد، زیرا امکان فراخوانی ()unreachable وجود دارد. اگر یک حالت switch برای warm و سپس یک break وجود داشته باشد، خطای کامپایل به عنوان بلوک پیشفرض حذف میشود و دیگر در دسترس نخواهد بود.
کاربرد احتمالی دیگر برای never در تابعی است که شامل یک حلقه نامتناهی است. همچنین در تابعی که همواره یک استثنا تولید میکند نیز کاربرد دارد:
1function loop(fn: Function): never {
2 while(true) fn();
3}
نوع کمتر شناخته شده دیگری که میتوانید استفاده کنید unknown است. این نوع صرفاً بدین معنا است که ما هیچ ایدهای در مورد آیتمی که داریم در اختیار نداریم. این وضعیت در صورتی رخ میدهد که برای نمونه یک API شخص ثالث را فراخوانی کنیم. اگر تلاش کنیم عملیات (x.substr(0, 2 را اجرا کنیم یک خطای کامپایل ایجاد میکند. بدین ترتیب ما میتوانیم از یک متغیر unknown با بررسی مقدمانی نوع استفاده کنیم. برای نمونه نوشتن کد زیر دیگر خطایی تولید نخواهد کرد:
1if (typeof x === “string”) x.substr(0, 2)
unknown هم بسیار شبیه به any و هم متضاد کامل آن است. شباهت آنها این است که در مورد هر دو نوع نمیدانیم که چه نوعی دارند. دلیل این که گفتیم متضاد کامل هم هستند نیز این نکته است که any هرگز خطای نوع صادر نمیکند، اما unknown همواره یک خطا صادر میکند تا این که بتوانیم نوع آن را تشخیص دهیم.
1const x: any;
2x.substr(0, 2); // doesn't throw a compilation error
3const y: unknown;
4y.substr(0, 2); // throws an error as we don't know what y is
5if (typeof y === 'string') y.substr(0, 2); // doesn't throw an error
اگر این مطلب برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای JavaScript (جاوا اسکریپت)
- آموزش JavaScript ES6 (جاوا اسکریپت)
- مجموعه آموزشهای برنامهنویسی
- راهنمای جامع تایپ اسکریپت (Typescript) — از صفر تا صد
- کاربرد ژنریک و Augmentation در تایپ اسکریپت — از صفر تا صد
==