۵

آبجکت و Interface

تعریف "شکل" و "قالب" برای آبجکت‌های پیچیده.

Type Aliases: ساختن اسم مستعار برای تایپ‌ها

وقتی تایپ‌های ما پیچیده می‌شن (مثلاً یه آبجکت با کلی ویژگی)، می‌تونیم با `type` براشون یه اسم مستعار بسازیم و از اون به بعد از همون اسم استفاده کنیم.

type User = {
  id: number;
  name: string;
  isActive: boolean;
};

function promoteUser(user: User) {
  console.log(`${user.name} was promoted!`);
}

const myUser: User = { id: 1, name: "مریم", isActive: true };
promoteUser(myUser);

Interfaces: تعریف یک قرارداد

`interface` هم خیلی شبیه `type` برای تعریف شکل آبجکت‌هاست، ولی یه کم قدرتمندتره و بیشتر برای تعریف "قرارداد"هایی که کلاس‌ها باید رعایت کنن استفاده می‌شه. یه فرق مهمش اینه که می‌تونه `extends` بشه (ارث‌بری کنه).

interface Person {
  name: string;
  age: number;
}

interface Employee extends Person {
  employeeId: number;
}

const employee: Employee = {
  name: "رضا",
  age: 40,
  employeeId: 101,
};

function greet(person: Person): string {
  return `Hello, ${person.name}!`;
}

console.log(greet(employee)); // "Hello, رضا!"

تمرین! 🧠

یه `interface` به اسم `Product` بساز که شامل ویژگی‌های `name` (رشته)، `price` (عدد) و یه ویژگی اختیاری به اسم `description` (رشته) باشه. بعد یه آبجکت از این نوع بساز و یه تابع بنویس که این آبجکت رو بگیره و اطلاعاتش رو چاپ کنه.

جواب تمرین

interface Product {
  name: string;
  price: number;
  description?: string; // علامت سوال یعنی اختیاری
}

const laptop: Product = {
  name: "لپ‌تاپ مدل X",
  price: 30000000,
  description: "یک لپ‌تاپ قدرتمند برای کارهای گرافیکی"
};

const mouse: Product = {
  name: "موس بی‌سیم",
  price: 500000
};

function displayProduct(product: Product): void {
  console.log(`نام محصول: ${product.name}`);
  console.log(`قیمت: ${product.price} تومان`);
  if (product.description) {
    console.log(`توضیحات: ${product.description}`);
  }
}

displayProduct(laptop);
displayProduct(mouse);