The Basics

مفاهیم پایه ای تایپ‌ اسکریپت، شامل طرز کار و نحوه اولیه کدنویسی

Static type-checking

تایپ‌اسکریپت به عنوان یک type-checker استاتیک (Static Type Checker) ساختار و رفتار متغیرها را قبل از اجرای برنامه بررسی می‌کند. اگر مشکلی ببیند (مثلاً فراخوانی تابعی که وجود ندارد، یا مقدار اشتباه در یک متغیر)، به ما در لحظه‌ی کدنویسی هشدار می‌دهد.

Non-exception Failures

تایپ‌اسکریپت با وجود اینکه از روی جاوا اسکریپت ساخته شده است، اما دارای یک سیستم تایپ استاتیک (static type system) است که قوانین سختگیرانه‌تری دارد.

در مثال زیر، تایپ‌اسکریپت خطایی برای استفاده پراپرتی location به دلیل وجود نداشتن آن در object user ارسال می‌کند:

const user = {
    name: "Daniel",
    age: 26
}

user.location;

در مثال زیر، متغیر value فقط می‌تواند "a" یا "b" باشد. اگر شرط if (value !== "a") درست باشد، قطعاً مقدار value == b است. پس در بخش else هم، مقدار value فقط می‌تواند "a" باشد. حالا اگر شرط else if (value === "b") را قرار دهیم (که یک عمل بیهوده است)، تایپ‌اسکریپت هشدار می‌دهد:

const value = Math.random() < 0.5 ? "a" : "b";

if (value !== "a") {
    // value = "b"
} else {
    // value = a 
} else if (value === "b") {
    // ❌ This part is unreachable
}

Types for Tooling

تایپ‌اسکریپت فقط یک سیستم بررسی نوع و نمایش خطا نیست. اگر خطایی رخ دهد، پیشنهادهایی را برای اصلاح آن ارائه می‌دهد.

  • 🔄 Refactoring (بازآرایی کد)
  • 🧭 Navigation (ناوبری سریع در کد)
  • 🧰 auto completion
  • tsc , the TypeScript compiler

نکته: tsc کامپایلر مربوط به تایپ‌اسکریپت است که کدهای تایپ‌اسکریپت را به جاوا اسکریپت خام تبدیل می‌کند. کامپایلر tsc فایل .ts را به یک فایل .js تبدیل می‌کند.

اگر خطایی در فایل .ts وجود داشته باشد، باز هم کامپایلر فایل خروجی .js را تولید می‌کند. به این دلیل که شاید شما بخواهید از پروژه جاوا اسکریپتی خود به تایپ‌اسکریپت مهاجرت کنید.

اگر قصد غیرفعال کردن این کار را دارید، باید تنظیمات زیر را به فایل tsconfig.json خود اضافه کنید:

{
    "compilerOptions": {
        "noEmitOnError": true
    }
}

Explicit Types

تایپ‌اسکریپت خودش به صورت اتوماتیک نوع متغیرهایی که به آنها مقداری پاس داده شده را تشخیص می‌دهد، با این حال می‌توان نوع تمام متغیرها، ورودی و خروجی توابع را تعیین کرد:

const name: string = "amirhossein"

Erased Types

در خروجی‌هایی که تایپ‌اسکریپت تولید می‌کند، هیچ‌کدام از نوع‌هایی که برای متغیرها تعریف کرده‌ایم وجود ندارند زیرا مرورگر نمی‌تواند تایپ‌اسکریپت را اجرا کند. پس نتیجه می‌گیریم که تایپ‌اسکریپت فقط برای بررسی ایمنی در زمان توسعه است.

Downleveling

تایپ‌اسکریپت کدی که با ES6 یا بالاتر نوشته شده باشد را به ES5 تبدیل می‌کند تا جاوا اسکریپت نوشته شده، در مرورگرهای قدیمی هم قابل اجرا باشد.

کد زیر با ES6 نوشته شده است:

`Hello ${person}, today is ${date.toDateString()}!`

در فایل خروجی، تایپ‌اسکریپت آن را به ES5 بازنویسی کرده است:

"Hello ".concat(person, ", today is ").concat(date.toDateString(), "!");

strictness

تایپ‌اسکریپت به صورت پیش‌فرض سعی می‌کند خیلی سخت‌گیر نباشد تا برنامه‌نویسانی که تازه وارد تایپ‌اسکریپت شده‌اند، بتوانند به راحتی با آن تعامل پیدا کنند. اما اگر می‌خواهید کد ایمن‌تری داشته باشید و خطاهای پنهان هم نداشته باشید، می‌توانید در فایل tsconfig.json خود، این حالت را فعال کنید:

tsconfig.json
{
    "compilerOption": {
        "strict": true
    }
}