آموزش جامع انواع داده در 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];// enumenum 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 Typelet id: string | number;id = 123; // OKid = "ABC123"; // OK// Literal Typetype 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;}
راهنمای تمرین:
- نوع پارامتر shape را مشخص کنید (فقط "circle" یا "rectangle" قابل قبول است)
- اینترفیس مناسب برای پارامتر dimensions تعریف کنید
- نوع بازگشتی تابع را مشخص کنید
- کد را با نمونهای از فراخوانی تابع تست کنید
📌 قدم بعدی
در درس بعدی با کلاسها و اینترفیسها در TypeScript آشنا خواهیم شد!