اگر یک تکنولوژی یا زبان برنامهنویسی در حال رشد باشد، همیشه انتظار می رود گزینهي جایگزینی باشد که پا به بازار گذاشته و رقابت سختی را ایجاد کند. در مورد جاوا اسکریپت (Javascript) هم این رقیب جدید وارد صحنه شده: تایپ اسکریپت (Typescript). به طور خلاصه می توان تایپ اسکریپت را نسخه پیشرفته جاوا اسکریپت با ویژگی های اضافی در نظر گرفت.
TypeScript یک زبان برنامه نویسی منبع باز برای توسعه برنامه های کاربردی بزرگ و پیچیده است. TypeScript توسط مایکروسافت در سال 2012 توسعه یافت و دلیل واقعی ایجاد آن مدیریت برنامه های کاربردی در مقیاس بزرگ بود. در واقع، TypeScript و JavaScript به ترتیب دومین و سومین زبان محبوبی هستند که توسعه دهندگان علاقه دارند با آن کار کنند. در واقع، جاوا اسکریپت به عنوان زبان برنامه نویسی اولیه برای برنامه ها و صفحات وب در نظر گرفته میشود. اما سوال اصلی این است که آیا جاوا اسکریپت برای ایجاد برنامه های وب در مقیاس بزرگ و پیچیده مناسب است؟ احتمالا پاسخ منفی است!
در این پست قصد داریم این دو زبان برنامه نویسی – TypeScript و JavaScript را با هم مقایسه کرده، نحوه ارتباط آنها با یکدیگر، تفاوت های آنها و مزایای هر یک را بیان کنیم.
TypeScript در مقابل جاوا اسکریپت: تفاوت های واقعی
اول از همه بگوییم که هر کدی که با جاوا اسکریپت نوشته شده باشد در TypeScript معتبر است. این بدان معناست که TypeScript مجموعهی بزرگتری است که جاوا اسکریپت را نیز شامل میشود. بنابراین، اگر فایل برنامه نویسی جاوا اسکریپت (js.) خود را با پسوند TypeScript (.ts) هم ذخیره کنید، به خوبی اجرا می شود. اما این بدان معنا نیست که هر دو زبان - TypeScript و JavaScript یکسان هستند. بنابراین، اجازه دهید قبل از بررسی بیشتر تعریف اساسی هر زبان را با هم مرور کنیم.
چرا با وجود جاوا اسکریپت، تایپ اسکریپت توسعه یافت؟
در ابتدا زبان جاوا اسکریپت به عنوان یک زبان برنامه نویسی سمت کلاینت معرفی شد. اما توسعه دهندگان دریافتند که می توان آن را یک زبان برنامه نویسی سمت سرور نیز در نظر گرفت. مشکلی که وجود داشت این بود کد جاوا اسکریپت بسیار پیچیده و سنگین شد. بنابراین، نمیتوانست انتظارات یک زبان برنامه نویسی شی گرا را برآورده کند. در نتیجه، جاوا اسکریپت هرگز نتوانست به عنوان یک فناوری سمت سرور به شکوفایی چشمگیری برسد. به همین دلیل است که زبان TypeScript برای پر کردن این شکاف متولد شد.
TypeScript چیست؟
اگر پرسیده شود «چه چیزی بهتر از جاوا اسکریپت است؟»، مطمئناً پاسخ این است: TypeScript. این زبان که توسط مایکروسافت توسعه و نگهداری می شود، یک زبان برنامه نویسی شی گرا و منبع باز است. این زبان در واقع مجموعه ای از کدهای جاوا اسکریپت است که تایپ (Type) اختیاری را نیز شامل میشود و در نهایت به جاوا اسکریپت ساده کامپایل می شود. به طور خلاصه، TypeScript یک زبان برنامه نویسی استاتیک برای نوشتن کدهای جاوا اسکریپت واضح و مختصر است. این همان هدف جاوا اسکریپت است و می تواند برای برنامه های سمت سرویس گیرنده و سمت سرور استفاده شود. علاوه بر این، کتابخانه های جاوا اسکریپت نیز با TypeScript سازگار هستند.
TypeScript یک زبان برنامه نویسی است که از تایپ پویا و استاتیک پشتیبانی می کند. کلاسها، Visibility Scope، NameSpace، وراثت، یونین، اینترفیسها و بسیاری ویژگیهای دیگر را پشتیبانی میکند. همچنین، کامنتها، متغیرها، عبارات، ماژول ها و توابع را نیز ارائه می دهد. میتوانید آن را روی Node.Js یا هر مرورگر دیگری که از ECMAScript 3 یا آخرین نسخههای آن پشتیبانی میکند، اجرا کنید.
از آنجایی که TypeScript نسخه پیشرفته جاوا اسکریپت است، تمام کدهای جاوا اسکریپت از نظر سینتکس TypeScript معتبر هستند. با این حال، این بدان معنا نیست که کامپایلر TypeScript می تواند تمام جاوا اسکریپت را پردازش کند، مثلاً:
let a = 'a'; a = 1; // throws: error TS2322: Type '1' is not assignable to type 'string'.
TypeScript فایلهایی را ارائه میکند که میتوانند شامل دادههای نوع از فایلهای شی فعلی باشند، مشابه نحوه تعریف فایلهای هدر ++C برای ایجاد فایلهای شی فعلی. از این رو، برنامههای دیگر میتوانند از مقادیر تعریفشده در فایلها مانند موجودیتهای TypeScript با مقادیر تایپ شده استاتیک استفاده کنند. همچنین فایل های هدر third-party را برای کتابخانه های محبوب مانند jQuery، D3.js و MongoDB پیدا خواهید کرد. همچنین هدرهای TypeScript برای ماژول های ابتدایی NodeJs وجود دارد که به توسعه دهندگان اجازه می دهد تا راه حل های توسعه Node.Js را در TypeScript ایجاد کنند.
کامپایلر TypeScript که در جاوا اسکریپت مونتاژ شده و با TypeScript نوشته می شود، تحت مجوز آپاچی ۲/۰ ثبت شده است. حالا که این مقدمه را در مورد TypeScript دانستیم، باید پرسید هدف از افزودن تایپ استاتیک به جاوا اسکریپت چیست؟
خوب،میتوان با عبارتهای زیر مقداری از پاسخ را روشن کنیم:
میتوان از خطاهای مخفی نینجا اجتناب کرد، مانند خطای معروف undefined' is not a function.
به راحتی می توان کد را بدون خرابکاری Refactor کرد.
گام برداشتن به سمت برنامههای مقیاس بزرگ و سیستم های پیچیده دیگر یک کابوس نیست.
طبق یکی از بررسی های انجام شده، TypeScript حدود ۱۵٪ از تمام خطاهای جاوا اسکریپت را شناسایی می کند.
آزادی تایپ پویا (dynamic typing) اغلب منجر به خطاهایی میشود که نه تنها کارایی توسعهدهنده را کاهش میدهد، بلکه میتواند سرعت توسعه اپلیکیشن را نیز کاهش دهد. در نتیجه، جاوا اسکریپت به دلیل عدم وجود تایپها و بررسی خطاهای زمان کامپایل، انتخاب ضعیفی برای کدهای سمت سرور در سازمان ها و پایگاه های کد بزرگ است. همانطور که برچسب آنها نشان می دهد، TypeScript جاوا اسکریپتی است که مقیاسپذیر است.
چرا باید از TypeScript استفاده کنیم؟
همانطور که قبلاً گفتیم، TypeScript نسخه پیشرفته جاوا اسکریپت است. بنابراین، در حالی که آن را با زبان های دیگری مانند CoffeeScript یا PureScript (که اصلا شبیه جاوا اسکریپت نیست) مقایسه می کنیم، لازم است چیزهای زیادی برای نوشتن کد TypeScript یاد گرفت. در TypeScript، تایپها اختیاری هستند و هر فایل جاوا اسکریپت یک فایل TypeScript معتبر است. در حالی که کامپایلر اگر هر یک از فایل های اولیه شما مشکل تایپ داشته باشد به شما اطلاع می دهد، همچنان یک فایل جاوا اسکریپت را ارائه می دهد که کار می کند. TypeScript انتظارات را برآورده می کند. پس نگران نباشید چون با گذر زمان میتوان مهارت های خود را بهبود بخشید.
آیا TypeScript برای Frontend یا Backend مناسب است؟
از آنجایی که TypeScript به جاوا اسکریپت کامپایل میشود، برای هر دو قسمت فرانت و بک توسعه برنامه مناسب است. علاوه بر این، جاوا اسکریپت یک زبان برنامه نویسی ترجیحی برای فرانتاند صفحات وب و برنامه ها است. در نتیجه، TypeScript ممکن است به همین دلیل مورد استفاده قرار گیرد، اما همچنین در سمت سرور برای پروژههای سازمانی پیچیده و بزرگ به خوبی کار میکند. با این حال، میتوانید از فریمورکهای برتر فرانتاند دیگری مانند React، Angular، Vue نیز برای ساخت اپلیکیشنهای بعدی خود استفاده کنید.
تایپها در TypeScript
TypeScript شامل تایپهای مختلفی از قبیل Number، Array، Tuple، Boolean، String و بسیاری دیگر است. خوب، برخی از این تایپها در جاوا اسکریپت موجود نیستند. با این حال، میتوانید در مستندات TypeScript درباره آنها اطلاعات بیشتری کسب کنید. علاوه بر اینها، در زیر چند تایپ دیگر که در TypeScript هستند آورده شده است:
Any & Unkown
تایپ Any (هر تایپی که بخواهید) می تواند تایپ Unkown را نیز پوشش دهد،و به نوعی type-safe سیستم آن است. در اینجا، any به شما امکان می دهد هر زمان که می خواهید از سیستم تایپ فرار کنید، متغیر جاوا اسکریپت را به صورت Any اختصاص دهید. به طور گسترده برای توصیف متغیرهای ورودی که هنوز تأیید نشده اند و نوع آنها ناشناخته است (به عنوان مثال، از API های third-party) استفاده می شود. Unknown مشابه Any است، اما اجازه انجام کاری با آن را نمی دهد مگر اینکه تایپ آن صریحاً بررسی شده باشد؟
Void
هنگامی که هیچ مقداری برگردانده نشده، از Void استفاده می شود. به طور کلی، برای نوع بازگشتی از تابع استفاده می شود که هیچ چیز را بر نمی گرداند.
Never
Never تایپی است برای مواردی که هرگز نباید اتفاق بیفتد، مانند یک تابع exception-throwing.
InterSection & Union
این تایپها به شما اجازه می دهند تا بر اساس اصول منطقی، تایپهای سفارشی ایجاد کنید. تایپ اینترسکشن به شما امکان می دهد چندین تایپ اصلی را در یک تایپ ترکیب کنید. برای مثال، اگر یک تایپ سفارشی Person ایجاد کنیم که حاوی first_name:string و last_name:string باشد. میتوان گفت من می خواهم تایپ من این AND آن باشد.
تایپ یونیون به شما امکان می دهد تایپی را بوجود بیاورید که در واقع معنی اجتماع منطقی را بدهد. برای مثال، اگر کوئریای وجود دارد که نتیجه آن String یا undefined را برمیگرداند، میتوانید این را اینگونه بگویید: من میخواهم نوع من این OR آن باشد.
همه این تایپها زمانی معنا پیدا می کنند که آنها را به عنوان space یا فضا در نظر بگیرید.
TypeScript از هر دو تایپ ضمنی و صریح پشتیبانی می کند. اگر تایپ خود را به طور صریح ننویسید، کامپایلر استنتاج تایپ را برای شناسایی تایپهایی که استفاده می کنید فعال می کند. از سوی دیگر، نوشتن آنها به صراحت مزایایی را به همراه دارد، مانند کمک به سایر اعضای تیم که کد شما را می خوانند و تأیید می کنند که آنچه می بینید همان چیزی است که کامپایلر می بیند.
ویژگی های TypeScript
مزایای TypeScript
جاوا اسکریپت چیست؟
تفاوت بین TypeScript و JavaScript
تایپ اسکریپت چه تفاوتی با جاوا اسکریپت دارد؟
چرا پروژه خود را به TypeScript منتقل کنید؟
زمان انتخاب: تفاوت بین جاوا اسکریپت و تایپ اسکریپت
آیا باید جاوا اسکریپت را یاد بگیرم یا TypeScript؟
مزایای TypeScript نسبت به جاوا اسکریپت
آیا TypeScript جایگزین جاوا اسکریپت می شود؟
مقایسه سر به سر: TypeScript در مقابل JavaScript
نتیجه