Avatar ·

ما الفرق بين interface و type في TypeScript ومتى نستخدم كل منهما؟

مرحبًا بالجميع! لقد بدأت للتو في تعلم TypeScript ووجدت طريقتين لوصف بنية الكائنات: `interface` و `type`. في البداية اعتقدت أنهما نفس الشيء، لكنني لاحظت لاحقًا أنهما يتصرفان بشكل مختلف في بعض الحالات. إليك مثال. يمكنني الكتابة باستخدام `interface`: ```typescript interface User { name: string; age: number; } ``` أو باستخدام `type`: ```typescript type User = { name: string; age: number; }; ``` كلا الخيارين يعملان بنفس الطريقة عندما أقوم بإنشاء كائن: ```typescript const user: User = { name: 'Alex', age: 30 }; ``` ولكن بعد ذلك حاولت دمج نوعين. مع `interface` يمكنني ببساطة كتابة واجهة ثانية بنفس الاسم وسيتم دمجهما: ```typescript interface User { email: string; } // الآن User يحتوي على name و age و email ``` أما مع `type` فقد حصلت على خطأ: "Duplicate identifier 'User'". عندها تعلمت عن `&` (intersection) للأنواع، لكن هذا بناء جملة مختلف. أيضًا سمعت أن `type` يمكنه فعل