ما الفرق بين 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` يمكنه فعل