۵
آبجکت و 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);