آموزش جامع انواع داده در TypeScript


🎯 اهداف یادگیری

  • آشنایی با سیستم نوع‌دهی TypeScript
  • یادگیری انواع داده پایه و پیشرفته
  • کاربرد انواع داده در توابع و متغیرها
  • استفاده از Type Inference و Type Annotations

📌 مقدمه‌ای بر انواع داده

TypeScript با اضافه کردن نوع‌های استاتیک به JavaScript، توسعه برنامه‌های پیچیده را آسان‌تر می‌کند:

typescript
// تعریف متغیر با نوع مشخص
let username: string = "JohnDoe";
let age: number = 25;
let isActive: boolean = true;

انواع داده پایه:

  • string: برای متن‌ها مانند "Hello World"
  • number: برای اعداد شامل اعشاری و صحیح
  • boolean: مقادیر true/false
  • any: هر نوع مقداری را می‌پذیرد (غیرایمن)

📌 انواع داده پیشرفته

TypeScript انواع داده پیچیده‌تری برای مدل‌سازی سناریوهای واقعی ارائه می‌دهد:

typescript
// آرایه‌ها
let numbers: number[] = [1, 2, 3];
// توپل (Tuple)
let user: [string, number] = ["John", 25];
// enum
enum Color {Red = 1, Green, Blue};
let c: Color = Color.Green;

انواع پیشرفته:

  • آرایه‌ها: مجموعه‌ای از مقادیر هم‌نوع
  • توپل‌ها: آرایه‌ای با طول ثابت و انواع مختلف
  • enum: مجموعه‌ای از مقادیر نام‌گذاری شده
  • void: برای توابع بدون مقدار بازگشتی
  • never: برای توابعی که هرگز بازگشت ندارند

📌 اینترفیس و تایپ‌های سفارشی

می‌توانید انواع داده سفارشی برای مدل‌سازی اشیاء پیچیده ایجاد کنید:

typescript
interface User {
id: number;
name: string;
email?: string; // اختیاری
isActive: boolean;
}
let currentUser: User = {
id: 1,
name: "John Doe",
isActive: true
};

ویژگی‌های اینترفیس:

  • اختیاری بودن: با علامت ? مشخص می‌شود
  • خوانایی: ساختار داده را به وضوح تعریف می‌کند
  • استفاده مجدد: می‌توان در چندین مکان استفاده کرد
  • اکستند کردن: امکان extends کردن اینترفیس‌ها وجود دارد

📌 Union و Literal Types

برای تعریف متغیرهایی که می‌توانند چندین نوع داشته باشند:

typescript
// Union Type
let id: string | number;
id = 123; // OK
id = "ABC123"; // OK
// Literal Type
type Direction = "up" | "down" | "left" | "right";
let move: Direction = "up";

کاربردهای Union و Literal Types:

  • انعطاف‌پذیری: پذیرش چندین نوع برای یک متغیر
  • محدود کردن مقادیر: تعریف مقادیر مجاز برای یک متغیر
  • پیشگیری از خطا: کاهش خطاهای ناشی از نوع‌های نادرست

📌 Type Inference و Type Annotations

TypeScript به صورت هوشمندانه می‌تواند نوع متغیرها را حدس بزند:

typescript
// Type Inference (تشخیص خودکار نوع)
let message = "Hello"; // نوع message به صورت خودکار string تعیین می‌شود
// Type Annotation (تعیین صریح نوع)
let count: number = 10;

مقایسه Type Inference و Type Annotations:

تشخیص خودکار (Inference) تعیین صریح (Annotation)
TypeScript نوع را از مقدار اولیه استنباط می‌کند نوع به صورت دستی مشخص می‌شود
برای متغیرهایی با مقدار اولیه مناسب است برای متغیرهای بدون مقدار اولیه ضروری است
کد را تمیزتر نگه می‌دارد برای وضوح بیشتر در کدهای پیچیده مفید است

📌 تمرین عملی

کد زیر را با انواع داده مناسب کامل کنید:

typescript
function calculateArea(shape, dimensions) {
if (shape === "circle") {
return Math.PI * dimensions.radius * dimensions.radius;
}
return dimensions.width * dimensions.height;
}

راهنمای تمرین:

  1. نوع پارامتر shape را مشخص کنید (فقط "circle" یا "rectangle" قابل قبول است)
  2. اینترفیس مناسب برای پارامتر dimensions تعریف کنید
  3. نوع بازگشتی تابع را مشخص کنید
  4. کد را با نمونه‌ای از فراخوانی تابع تست کنید

📌 قدم بعدی

در درس بعدی با کلاس‌ها و اینترفیس‌ها در TypeScript آشنا خواهیم شد!