تایپاسکریپت یعنی جاوااسکریپت + یک لایهی نوعِ پاکشدنی
این نسخهی پیشنمایش عمومیه. برای نمره گرفتن، ذخیرهی پیشرفت و باز کردن درسهای بعدی ثبتنام کن.
ثبتنام رایگانورودیک جمله که همهچیز را روشن میکند
تایپاسکریپت یک زبانِ جدا نیست. همان جاوااسکریپتِ آشناست، بهاضافهی یک لایهی نوعِ ایستا که فقط زمانِ نوشتنِ کد و زمانِ کامپایل وجود دارد. این لایه به کامپایلر میگوید «این متغیر یک عدد است، آن یکی یک رشته» — و کامپایلر، پیش از اینکه برنامهات حتی اجرا شود، اشتباهها را به تو نشان میدهد.
هر کدِ جاوااسکریپتِ درستی، یک کدِ تایپاسکریپتِ معتبر هم هست. تو فقط کمکم حاشیهنویسیِ نوع (type annotation) اضافه میکنی تا کامپایلر بیشتر کمکت کند.
یک مثالِ کوچک
این تابع را ببین. کلمهی : number بعد از پارامتر و بعد از پرانتز، همان «لایهی نوع» است:
function double(n: number): number {
return n * 2;
}
console.log(double(21)); // 42
اگر اشتباهاً یک رشته به این تابع بدهی، مثلِ double("سلام")، برنامه اصلاً اجرا نمیشود؛ کامپایلر همانجا جلویت را میگیرد. در جاوااسکریپتِ خالی، این اشتباه تا زمانِ اجرا پنهان میماند و بعد به یک باگِ عجیب تبدیل میشود.
سه ایدهی کلیدیِ این ماژول
هر چیزی که در این ماژول یاد میگیری، حول این سه ستون میچرخد:
۱) نوعها زمانِ اجرا پاک میشوند (type erasure).
بعد از کامپایل، تمامِ نوعها و حاشیهنویسیها حذف میشوند. کدِ نهایی همان جاوااسکریپتِ معمولی است که روی Node اجرا میشود. یعنی نوعها فقط «راهنما برای کامپایلر»اند، نه چیزی که زمانِ اجرا وجود داشته باشد.
۲) خطای نوع در زمانِ کامپایل گرفته میشود، نه زمانِ اجرا.
کامپایلر (tsc) نقشِ یک بازبینِ سختگیر را دارد. اگر نوعها جور درنیایند، یک خطِ قرمز میبینی و فایلِ جاوااسکریپتِ خروجی ساخته نمیشود.
۳) استنتاج (inference) پیشفرض است.
لازم نیست همهجا نوع بنویسی. اگر بنویسی const x = 10، خودِ کامپایلر میفهمد x یک عدد است. تو فقط جایی نوع مینویسی که استنتاج کافی نیست — مثلِ پارامترهای تابع.
قراردادِ این پلتفرم (مهم — همینجا حفظش کن)
در این دوره، کدِ تو دقیقاً اینطور سنجیده میشود:
اول با
tsc --strict --target es2020کامپایل میشود (حالتِ سختگیرانهی کامل:strictNullChecks،noImplicitAnyو …).سپس جاوااسکریپتِ خروجی روی Node 20 اجرا میشود و خروجیِ
console.logبا پاسخِ درست مقایسه میشود.
پیامدِ این قرارداد یک قانونِ ساده است که در کلِ دوره با آن زندگی میکنی:
یک خطِ قرمزِ نوع = یک تستِ شکستخورده.
چرا؟ چون اگر کامپایلر خطا بدهد، اصلاً جاوااسکریپتی تولید نمیشود، پس هیچ خروجیای چاپ نمیشود، و تستی که خروجی را مقایسه میکند، چیزی برای مقایسه پیدا نمیکند → شکست. برخلافِ ذهنیتِ «بعداً درستش میکنم»، اینجا تا وقتی نوعها سالم نباشند، برنامهای وجود ندارد.
یک نکتهی فنی که زود به دردت میخورد
روی این پلتفرم، هر تمرین یک فایلِ تنها است: main.ts. کامپایلر فقط همین فایل را میبیند، پس import از فایلهای دیگر کار نمیکند. هر وقت به ساختاربندی نیاز داشتی، از یک بلوکِ namespace در همان فایل استفاده میکنی. (ماژولها و import/exportِ واقعی را بهعنوانِ یک مفهوم در درسهای بعد یاد میگیری.)
جمعِ بندی
تایپاسکریپت = جاوااسکریپت + یک لایهی نوعِ پاکشدنی که کامپایلر بررسیاش میکند و بعد دورش میاندازد. نوعها زمانِ اجرا پاک میشوند، خطاها زمانِ کامپایل گرفته میشوند، و استنتاج کارِ تو را سبک میکند. این درس کدی برای حل نداشت — فقط طرزِ فکر. در درسِ بعد، یک برنامهی نوعدارِ آماده را میبینی که واقعاً اجرا میشود.