آموزش برنامه نویسی

تایپ اسکریپت چیست ؟ مزایا و معایب آن چیست ؟

در این وبلاگ آموزشی از شرکت برنامه نویسی وارنا قصد داریم تا شما عزیزان را با زبان محبوب و پرکارآمد تایپ اسکریپ آشنا کنیم و همچنین شما را با مزایا و معایبی که دارد آشنا کنیم تا بهتر این زبان را بشناسید .

20 دقیقه مطالعه ۱۶ مرداد ۱۴۰۳ 236 بازدید مرتضی رستمیان
تصویر مقاله تایپ اسکریپت چیست ؟ مزایا و معایب آن چیست ؟
TypeScript بدون پیچیده‌گویی

TypeScript چیست و چه زمانی واقعاً ارزش استفاده دارد؟

اگر مدتی با JavaScript کار کرده باشید، احتمالاً این موقعیت را دیده‌اید: همه‌چیز ظاهراً درست است، اما برنامه را که اجرا می‌کنید تازه معلوم می‌شود یک مقدار اشتباه از جایی وارد کد شده. در پروژه کوچک معمولاً پیدا کردنش دردسر زیادی ندارد؛ در پروژه بزرگ، همین خطای ساده می‌تواند شما را بین چند فایل و Component بچرخاند.

TypeScript قرار است بخشی از همین دردسر را کمتر کند. روی JavaScript ساخته شده و با Typeها به کد شما اطلاعات بیشتری می‌دهد؛ طوری که بعضی ناسازگاری‌ها همان موقع نوشتن کد مشخص می‌شوند، نه چند دقیقه یا چند ساعت بعد هنگام اجرا.

اینجا قرار نیست TypeScript را پیچیده کنیم. می‌خواهیم ببینیم دقیقاً چه چیزی به JavaScript اضافه می‌کند، کجا واقعاً مفید است و چه وقت استفاده نکردن از آن هم کاملاً منطقی است.

برنامه نویسی و کدنویسی روی لپ تاپ
Wikimedia Commons — CC0
پایه TypeScript JavaScript
قابلیت اصلی Type Safety
کاربرد مناسب پروژه‌های بزرگ‌تر
پیش‌نیاز پیشنهادی JavaScript

TypeScript چه چیزی روی JavaScript می‌گذارد؟

ساده‌ترین نگاه این است که TypeScript را JavaScript با اطلاعات بیشتر ببینیم. همان منطق و همان زبان پایه را دارید، اما می‌توانید مشخص کنید یک مقدار چه نوعی است، یک تابع چه ورودی‌ای می‌گیرد و قرار است چه چیزی برگرداند.

مثلاً تابعی نوشته‌اید که قیمت را به‌صورت عدد می‌گیرد، اما جایی دیگر ناخواسته یک متن برایش می‌فرستید. در JavaScript ممکن است این اشتباه تا زمان اجرا پنهان بماند؛ TypeScript معمولاً زودتر به شما می‌گوید که این دو با هم سازگار نیستند.

نکته مهم این است که مرورگر در نهایت JavaScript اجرا می‌کند. کد TypeScript قبل از اجرا به JavaScript تبدیل می‌شود. بنابراین قرار نیست زبان قبلی را کنار بگذارید؛ TypeScript بیشتر یک لایه کمکی برای توسعه منظم‌تر است.

JavaScript vs TypeScript

JavaScript و TypeScript؛ تفاوت را کِی حس می‌کنیم؟

JavaScript همچنان همان زبانی است که منطق برنامه را با آن می‌نویسید. TypeScript روی همین پایه می‌آید و به داده‌ها و توابع توضیح بیشتری اضافه می‌کند؛ توضیحی که هم برای شما مفید است، هم برای ابزارهایی مثل VS Code.

مثلاً می‌توانید بگویید این متغیر باید عدد باشد، این تابع فقط رشته بگیرد یا این Object حتماً فیلدهای مشخصی داشته باشد.

نتیجه این است که Editor بهتر می‌فهمد با چه چیزی سروکار دارد و زودتر درباره بعضی اشتباه‌ها هشدار می‌دهد. البته این به معنی بدون‌باگ شدن پروژه نیست؛ اگر منطق برنامه غلط باشد، TypeScript قرار نیست آن را جادویی اصلاح کند.

برنامه نویس در حال کدنویسی
Wikimedia Commons — CC0

Type Safety وقتی داده بین چند بخش می‌چرخد، خودش را نشان می‌دهد

فرض کنید اطلاعات کاربر شامل نام، سن و ایمیل است. تا وقتی همه‌چیز در یک فایل باشد شاید مشکلی حس نکنید، اما وقتی همین داده بین فرم، API و چند Component جابه‌جا شود، یک اختلاف کوچک در ساختار می‌تواند دردسر درست کند.

با TypeScript می‌توانید یک‌بار شکل این داده را تعریف کنید. بعد اگر بخشی از برنامه چیزی خارج از همان ساختار بفرستد، معمولاً خیلی زود متوجه می‌شوید.

برای یک پروژه دوصفحه‌ای شاید این ویژگی خیلی هیجان‌انگیز به نظر نرسد؛ اما هرچه تعداد داده‌ها، Componentها و APIها بیشتر شود، داشتن چنین قرارداد مشخصی ارزش بیشتری پیدا می‌کند.

چرا هرچه پروژه بزرگ‌تر می‌شود TypeScript بیشتر به چشم می‌آید؟

TypeScript قرار نیست تعداد خط‌های کد را کم کند؛ حتی گاهی برعکس، برای تعریف Typeها چند خط بیشتر می‌نویسید. سود اصلی وقتی دیده می‌شود که چند ماه از عمر پروژه گذشته، بخش‌های زیادی به هم وابسته‌اند و قرار است بدون ترس آن‌ها را تغییر دهید.

پیدا کردن زودتر خطا

بعضی خطاهایی که در JavaScript تازه موقع اجرا می‌بینید، اینجا همان زمان نوشتن کد جلوی چشمتان می‌آیند.

خوانایی بهتر

از روی Typeها سریع‌تر می‌شود فهمید هر تابع یا Component چه داده‌ای می‌خواهد و چه چیزی تحویل می‌دهد.

Refactor مطمئن‌تر

اگر شکل یک داده را عوض کنید، TypeScript معمولاً جاهایی را که هنوز با ساختار قبلی کار می‌کنند برایتان پیدا می‌کند.

مناسب کار تیمی

Typeها شبیه یک قرارداد مشترک‌اند؛ توسعه‌دهنده بعدی لازم نیست برای فهمیدن شکل داده، چند فایل را حدس بزند.

TypeScript برای چه پروژه‌ای واقعاً ارزش دردسر اضافه را دارد؟

برای هر فایل JavaScript لازم نیست TypeScript راه بیندازید. یک اسکریپت کوتاه، نمونه آزمایشی یا پروژه خیلی کوچک ممکن است با JavaScript ساده‌تر و سریع‌تر جلو برود. TypeScript وقتی ارزش بیشتری پیدا می‌کند که کد قرار است رشد کند و مدت زیادی نگهداری شود.

React و Next.js

در React و Next.js می‌توانید شکل Props، State و پاسخ API را واضح تعریف کنید و کمتر دنبال این بگردید که «این مقدار از کجا آمده بود؟».

پروژه‌های تیمی

در کار تیمی، Typeها بخش زیادی از ابهام را کم می‌کنند و به بقیه می‌گویند هر قسمت از کد دقیقاً چه داده‌ای انتظار دارد.

پنل و داشبورد

پنل‌ها و داشبوردها معمولاً پر از فرم، جدول و داده‌اند؛ جایی که مشخص بودن شکل اطلاعات واقعاً کمک می‌کند.

پروژه‌های بلندمدت

پروژه‌ای که قرار است ماه‌ها یا سال‌ها زنده بماند، بیشتر از یک نمونه موقت به خوانایی و تغییر امن نیاز دارد.

مزایای TypeScript

  • تشخیص بخشی از خطاها قبل از اجرای برنامه
  • پیشنهادهای دقیق‌تر در Code Editor
  • خوانایی بهتر ساختار داده‌ها
  • Refactor ساده‌تر در پروژه‌های بزرگ
  • هماهنگی بهتر در کار تیمی

محدودیت‌های TypeScript

  • نیاز به یادگیری مفاهیم جدید TypeScript
  • پیچیده شدن بعضی Typeهای پیشرفته
  • ممکن است برای پروژه خیلی کوچک ضرورتی نداشته باشد
  • خطاهای منطقی برنامه را به‌طور کامل حذف نمی‌کند

قبل از TypeScript، JavaScript را تا کجا باید بلد باشیم؟

اگر هنوز با خود JavaScript درگیر هستید، TypeScript را فعلاً کنار بگذارید. Function، Object، Array، Module و کدهای Async را باید با خود JavaScript بفهمید؛ TypeScript هیچ‌کدام از این مفاهیم را به جای شما یاد نمی‌گیرد.

شروع خیلی زود باعث می‌شود وقتی کد اجرا نمی‌شود، ندانید مشکل از JavaScript است یا از Typeی که تعریف کرده‌اید. همین موضوع برای یک تازه‌کار می‌تواند مسیر را بی‌دلیل شلوغ کند.

وقتی بتوانید یک پروژه کوچک JavaScript را بدون کپی‌کردن خط‌به‌خط آموزش جلو ببرید، وقت مناسبی است که TypeScript را وارد کار کنید.

مطالعه مقاله JavaScript چیست
مسیر پیشنهادی یادگیری

TypeScript را با این ترتیب جلو ببرید

مرحله ۱

JavaScript را خوب یاد بگیرید

اول مطمئن شوید Function، Array، Object، Module و جریان اصلی JavaScript برایتان جا افتاده است.

مرحله ۲

Typeهای پایه

از Typeهای ساده شروع کنید و برای ورودی و خروجی تابع‌ها Type بنویسید؛ همین بخش خیلی از مفهوم را جا می‌اندازد.

مرحله ۳

Interface و Type Alias

بعد سراغ داده‌های واقعی پروژه بروید و شکل Objectها را با Interface یا Type Alias تعریف کنید.

مرحله ۴

Union، Narrowing و Generic

وقتی پایه‌ها راحت شد، Union، Narrowing و Generic را روی مثال‌های واقعی تمرین کنید؛ نه فقط تعریف‌ها.

مرحله ۵

پروژه واقعی

در یک پروژه React یا Next.js، Typeها را برای Props، فرم‌ها و پاسخ API وارد کنید تا کاربردشان را واقعاً ببینید.

TypeScript را با یک پروژه یاد بگیرید، نه با حفظ کردن Typeها

اگر فقط فهرست Typeها را حفظ کنید، احتمالاً چند روز بعد بخش زیادی از آن فراموش می‌شود. TypeScript وقتی جا می‌افتد که وسط یک پروژه واقعاً به یک Type نیاز پیدا کنید و بفهمید چرا وجودش مفید است.

مثلاً برای Product یک Type بسازید، پاسخ API را با همان ساختار بگیرید و بعد آن را به Props کارت محصول بدهید. اینجا خیلی روشن می‌بینید Type چه مشکلی را حل کرده است.

از روز اول سراغ Typeهای عجیب و چندلایه نروید. اگر تعریف Type از خود کد سخت‌تر خوانده می‌شود، احتمالاً دارید مسئله را پیچیده‌تر از چیزی که هست حل می‌کنید.

تمرین برنامه نویسی و توسعه پروژه
Wikimedia Commons — CC0

چند اشتباه که TypeScript را سخت‌تر از چیزی که هست نشان می‌دهد

استفاده زیاد از any

any گاهی لازم می‌شود، اما اگر پاسخ هر مشکل شما any باشد، عملاً بخش مهمی از فایده TypeScript را خاموش کرده‌اید.

Typeهای بیش از حد پیچیده

Type قرار است فهم کد را راحت‌تر کند؛ نه اینکه برای خواندن خودش به توضیح جداگانه نیاز داشته باشد.

JavaScript ضعیف

اگر JavaScript را خوب نفهمیده باشید، TypeScript آن ضعف را پنهان نمی‌کند؛ فقط یک لایه جدید به همان مشکل اضافه می‌شود.

حفظ کردن Syntax

Syntax بدون پروژه خیلی زود فراموش می‌شود. بهتر است هر مفهوم را همان موقع در یک مسئله واقعی استفاده کنید.

سوالات متداول درباره TypeScript

TypeScript چیست؟

TypeScript روی JavaScript ساخته شده و با اضافه کردن سیستم Type کمک می‌کند ساختار داده‌ها و ارتباط بخش‌های پروژه واضح‌تر باشد.

آیا TypeScript جای JavaScript را می‌گیرد؟

خیر. TypeScript جای JavaScript را نمی‌گیرد؛ کدی که می‌نویسید در نهایت برای اجرا به JavaScript تبدیل می‌شود.

TypeScript جلوی همه Bugها را می‌گیرد؟

خیر. TypeScript بخشی از خطاهای مربوط به نوع داده را زودتر پیدا می‌کند، اما اشتباه در منطق برنامه همچنان ممکن است.

برای پروژه کوچک هم لازم است؟

نه همیشه. برای یک پروژه خیلی کوچک ممکن است JavaScript ساده‌تر باشد؛ مزیت TypeScript معمولاً با بزرگ‌تر شدن پروژه بیشتر دیده می‌شود.

چه زمانی TypeScript را شروع کنیم؟

وقتی با JavaScript راحت شدید و توانستید چند پروژه کوچک را بدون وابستگی کامل به آموزش جلو ببرید.

مسیر فرانت‌اند

TypeScript را بعد از جا افتادن JavaScript وارد مسیر کنید

اگر می‌خواهید فرانت‌اند را جدی دنبال کنید، ترتیب یادگیری خیلی مهم‌تر از زیاد کردن تعداد ابزارهاست: اول HTML و CSS، بعد JavaScript؛ سپس TypeScript، React و Next.js را وارد مسیر کنید.

در وارناپاد می‌توانید مسیرهای فرانت‌اند را ببینید و قبل از شروع هر مرحله بررسی کنید چه پیش‌نیازی دارد و قرار است چه چیزی یاد بگیرید.

جمع‌بندی؛ TypeScript را برای اسمش وارد پروژه نکنید

اگر هنوز با پایه‌های JavaScript کلنجار می‌روید، عجله‌ای برای TypeScript نیست. اول باید بتوانید با JavaScript مسئله حل کنید، خطا پیدا کنید و یک پروژه کوچک را تا آخر ببرید.

وقتی پروژه بزرگ‌تر شد، سراغ React و Next.js رفتید یا چند نفر روی یک کد کار کردند، آن‌وقت TypeScript کم‌کم ارزشش را نشان می‌دهد: داده‌ها واضح‌ترند و بخشی از خطاها زودتر جلوی چشم می‌آیند.

پس TypeScript را جایگزین JavaScript نبینید. پایه همان JavaScript است؛ TypeScript فقط کمک می‌کند وقتی پروژه جدی‌تر شد، کمتر با داده‌های مبهم و تغییرهای غیرمنتظره غافلگیر شوید.