اگر با جاوا اسکریپت کد نوشته باشید، حداقل یک بار خطای  undefined is not a function یا Cannot read properties of undefined را در برنامه خود دیده اید. دلیل بروز این خطاها طبیعت جاوا اسکریپت است که برای حل این مشکل typeScript راهی بازار شده است. در این مقاله typeScript را توضیح می‌دهیم و می‌گوییم که چه مشکلی را حل خواهد کرد.

TypeScript چیست؟

فکر نکنید که typeScript یک زبان یا فریمورک جدید است بلکه همان جاوا اسکریپت است ولی یک سری امکانات جدید به آن اضافه شده است. یعنی تایپ اسکریپت یک superset از جاوا اسکریپت است. یعنی هر کدی که به زبان جاوا اسکریپت بنویسید یک کد typeScript معتبر هم هست اما typeScript یک لایه است که بر روی JS قرار داده شده است که امکانات مختلفی را به آن اضافه می‌کند تا ضعف‌های JS پوشانده شود. چندتا از این امکانات عبارتند از:

سیستم بررسی نوع(type system)

ذات جاوااسکریپت نوع دهی پویا (Dynamic type) است. یعنی وقتی که یک متغیر تعریف می کنید لازم نیست که نوع آن را مشخص کنید و بگویید که در این متغیر قرار است که فقط عدد ریخته شود. بلکه مفسر جاوااسکریپت خود با مقداری که در آن ریخته می شود متوجه این موضوع خواهد شد مثل کد زیر

let age = 25; // age is a number
age = "بیست و پنج"; // age is String now

جاوااسکریپت مشکلی با کد بالا ندارد. این انعطاف پذیری در پروژه های کوچک خوب و کمک کننده است. اما در پروژه های بزرگ مشکلات بسیار بزرگی را به وجود خواهد آورد. حال typeScript قابلیت نوع داده را به زبان اضافه می کند و می توانید با استفاده از آن هنگام تعریف متغیر نوع آن را مشخص کنید. مثلا age را از نوع عددی مشخص کنید. در این صورت فقط عدد می پذیرد و در صورت قرار دادن رشته داخل آن به خطا برخورد خواهید کرد.

let age: number = 25;
age = "بیست و پنج"; //Error


نکته کلیدی: مرورگرها typeScript را متوجه نمی شوند.
 پس typeScript قبل از این که کدهای شما اجرا شوند آنها را به جاوااسکریپت کامپایل می کند. به همین دلیل می توان typeScript را یک ابزار کمکی دانست که در زمان توسعه از آن استفاده می شود که خطاهای زمان اجرا (runtime) را کم می کند. 

 

آیا به چیزی فراتر از جاوااسکریپت نیاز داریم؟

وقتی که بیش از 10 برنامه نویس در حال کار بر روی یک پروژه بزرگ هستند انعطاف پذیری زیاد جاوااسکریپت تبدیل به نقطه ضعف آن خواهد شد. به همین دلیل اگر قوانینی باشد که کمی استفاده از جاوااسکریپت را ساختارمند تر کند باعث بهتر شدن نگهداری (Maintenance) کدها خواهد شد. قوانینی که مشخص کند

  •     ورودی این تابع از چه نوعی است؟
  •     مشخصات (property) های این شی کدام هستند و از چه نوعی هستند؟
  •     اگر خروجی این تابع تغییر کند کدام قسمت های پروژه تحت تاثیر قرار خواهند گرفت؟

اگر از جاوااسکریپت خالص استفاده کنید جواب دادن به این نوع سوالات شاید سخت باشد ولی typeScript دقیقا برای حل چنین مشکلاتی توسط مایکروسافت ارائه شده است.

مزایا typeScript چیست؟

استفاده از TS فقط برای رفع خطا نیست بلکه تجربه کد نویسی شما را هم بالا خواهد برد. در ادامه یک سری از مزایای typeScript را آورده ایم.

۱. پیدا کردن خطاها قبل از اجرا (static type checking)

مهم ترین مزیت typeScript همین است. لازم نیست که برنام را اجرا کنید یا در مرورگر ببینید تا بدانید برناه خطا دارد در زمان تایپ اگر خطایی باشد به شما گزارش می شود و باعث می شود که در زمان صرفه جویی کنید.

۲. کدنویسی سریع تر و هوشمندانه تر

وقتی که اعضای یک شی از قبل مشخص شده باشد وقتی که شما یک شی می سازید امکانات Autocomplete محیط های برنامه نویسی اعضای شی را در یک لیست به شما نمایش می دهد و راحت تر و هوشمندانه تر برنامه می نویسید در حالی که در جاوااسکریپت خالص شاید این اتفاق نیفتد.

3. سهولت Refactor کردن

عمل Refactor کردن بسیار آسان تر است زیرا که مثلا اگر شما نام یک تابع را در typeScript تغییر دهید کامپایلر به شما خواهد گفت که کدام قسمت کدها را باید تغییر دهید ولی در جاوااسکریپت شاید سخت تر باشد. البته IDE های هوشمند می توانند این تغییر نام ها را به صورت سراسری انجام دهند و جای نگرانی نباشد.

۴. خوانایی و مستند سازی بهتر

کدهای typeScript به خاطر این که نوع آنها و اعضای آنها مشخص است خواناتر از کدهای جاوااسکریپت هستند. زیرا که نوع ورودی و خروجی توابع و متغیر ها مشخص است. این بخش در کارهای تیمی بسیار مفید است.

معایب typeScript

از آنجایی که هیچ ابزاری کامل نیست typeScript هم چالش های خودش را دارد که در ادامه به آنها اشاره می کنیم.

۱. پیچیدگی و منحنی یادگیری

در یادگیری typeScript شما فقط جاوااسکریپت یاد نمی گیرید بلکه مفاهیم جدید مثل Interface, Type, Generics, Enums را هم یاد می گیرید که باید با فلسفه آنها آشنا شوید و این کمی یادگیری را پیچیده می کند.

۲. نیاز به کامپایل

وقتی که با جاوااسکریپت کد می نویسید به راحتی مرورگر آن را درک می کند و می توانید کدهای جاوااسکریپت را در داخل Html بنویسید و مشکلی برای اجرا نداشته باشید. اما در typeScript یک مرحله کامپایل هم در این بین وجود دارد که کار را کمی پیچیده تر می کند البته ابزاهای مدرنی مثل vite وجود دارند که عمل کامپایل را تقریبا لحظه ای انجام می دهند.

۳.کند شدن فرایند کدنویسی

البته من این را به عنوان یک عیب نمی شناسم زیرا که قبل از این که با جاوا اسکریپت کار کنم قبلا با زبان های static type کار کرده ام. اما برای کسانی که با زبان هایی مثل جاوااسکریپت کار کرده اند این که در ابتدا تصمیم بگیرند که نوع متغیر یا نوع ورودی و خروجی تابع چه نوعی باشد شاید فرایند را کند کند. البته این در کوتاه مدت است و در بلند مدت به خاطر این که همه چیز نوع مشخصی دارند فرایند کدنویسی و پیشرفت سریع تر خواهد شد.

آیا typeScript یک ابزار کاربردی است؟

خیلی از برنامه نویسان اوایل فکر می کردند که typeScript هم مانند کتابخانه هایی مثل CoffeeScript یک ترند است و بعد از مدتی رو به افول خواهد رفت. اما این اتفاق نیفتاد. زیرا که typeScript یک مشکل واقعی را در جاوااسکریپت حل کرده است. از نظر آماری هم می توان درک کرد که typeScript واقعا کاربردی است. مثلا

  •  در نظرسنجی سالانه StackOverflow تایپ اسکریپت سال هاست که در لیست زبان های محبوب قرار گرفته است حتی بعضی وقت ها بالا تر از جاوااسکریپت.
  •  گوگل از تایپ اسکریپت به عنوان زبان اصلی فریمورک انگولار که یکی محبوب ترین فریمورک های فرانت اند است استفاده می کند.
  •  علاوه بر Angular رقبای فرانت دیگر مثل React, Vue هم به صورت کامل از تایپ اسکریپت پشتیبانی می کنند.
  •  اکثر کتابخانه های مهم node.js یا با تایپ اسکریپت نوشته شده اند یا فایل های تعریف نوع را با خود ارائه می کنند.

پس وقتی که کل اکوسیستم (از جمله رقبای سازنده تایپ اسکریپت مثل گوگل و فیسبوک) از تایپ اسکریپت که محصول مایکروسافت است استفاده می کنند و آن را به صورت کامل پذیرفته اند یعنی یک ابزار کاربردی است. 

چه زمانی باید از تایپ اسکریپت استفاده کنیم و چه زمانی استفاده نکنیم؟

با این که تایپ اسکریپت بسیار محبوب و کاربردی است اما استفاده از آن همیشه ضروری نیست. از تایپ اسکریپت در موارد زیر حتما استفاده کنید:

  •  پروژه شما بزرگ و پیچیده است (مثل داشبورد ادمین،  یا فروشگاه یا شبکه اجتماعی)
  •  در یک تیم بزرگ کار می کنید. (استفاده از TS ارتباط بین اعضای تیم را بهتر می کند.)
  •  قرار است که پروژه در بلند مدت نگهداری شود. (TS قابلیت نگهداری بهتری دارد.)

بهتر است که در موارد زیر از typeScript استفاده نشود.

  •  اگر در حال نوشتن یک اسکریپت کوچک هستید. (مثلا چند خط کد برای انیمیشن دکمه در صفحه)
  •  اگر در حال ساخت یک prototype هستید و می خواهید ببینید که یک ایده کار می کند یا خیر.
  •  پروژه شما خیلی کوچک است و قرار است که فقط خودتان روی آن کار کنید.(البته در این مورد استفاده از TS توصیه میشه)

جمع بندی

اگر در حال گذراندن مسیر تبدیل شدن به یک برنامه نویس فرانت اند هستید یا می خواهید این مسیر را شروع کنید حتما یادگیری typescript را در اولویت قرار دهید زیرا که همه فریمورک های فرانت اند از آن پشتیبانی می کنند و در بیشتر آگهی های استخدامی این زبان یکی از ضروریات است. پس آن را یاد بگیرید.