Midسختی 3 از ۵· در 60٪ مصاحبههای این حوزه پرسیده شده
تفاوت `interface` و `type` در TypeScript چیست و کدام را باید انتخاب کرد؟
☆نشان کردنپاسخ کوتاه
هر دو برای توصیف شکل یک شیء استفاده میشوند؛ تفاوت اصلی این است که `interface` قابل گسترش (Declaration Merging) است و `type` میتواند Union/Intersection و نوعهای غیرشیءای را هم توصیف کند.
پاسخ کامل
از نظر عملکردی برای توصیف شکل یک Object این دو تقریباً یکساناند:
interface UserI { id: number; name: string; }
type UserT = { id: number; name: string; };
تفاوتهای عملی:
interfaceمیتواند چند بار با همان نام تعریف شود و اعضا با هم ادغام میشوند (Declaration Merging) — مفید برای گسترش تایپهای کتابخانههای دیگر.typeمیتواند Union (type Status = "ok" | "error")، Intersection، Tuple و نوعهای ابتدایی را هم تعریف کند؛interfaceفقط برای شکل شیء/کلاس مناسب است.
قاعده عملی رایج: برای توصیف شکل یک Object یا Class از interface استفاده کنید (چون معمولاً بعداً نیاز به گسترش پیدا میکند)، برای Union/Intersection/نوعهای ترکیبی از type.
مثال کد
type Status = "loading" | "success" | "error"; // فقط با type ممکن است
interface Animal { name: string; }
interface Animal { age: number; } // ادغام میشود؛ فقط با interface ممکن است
نکته مهم
منبع کامل موضوع: TypeScript Handbook — Object Types.
اشتباه رایج
❌ گفتن اینکه «type و interface دقیقاً یکساناند» — شبیهاند اما Declaration Merging فقط مخصوص interface است.
