TypeScript: ما الفرق بين `interface` و `type`؟ متى نستخدم أيهما؟
مرحبًا بالجميع! بدأت تعلم TypeScript وأصبحت مرتبكًا بشأن الفرق بين `interface` و `type`. يبدو أن كلاهما يسمح بوصف بنية الكائنات، لكنني لا أفهم متى أستخدم أي أداة.
ألقِ نظرة على الكود الخاص بي. أحاول وصف مستخدم وعنوانه:
```typescript
// الخيار مع interface
interface IUser {
name: string;
age: number;
address: IAddress;
}
interface IAddress {
city: string;
street: string;
}
// الخيار مع type
type TUser = {
name: string;
age: number;
address: TAddress;
}
type TAddress = {
city: string;
street: string;
}
```
كلا الخيارين يعملان، لكنني سمعت أن هناك اختلافات جوهرية. على سبيل المثال، رأيت أن `type` يمكنه فعل شيء مع الاتحادات (unions)، بينما `interface` لا يستطيع. وأيضًا في بعض المشاريع يستخدمون `interface` لكل شيء، بينما في مشاريع أخرى يستخدمون `type`.
أرجو توضيح الفرق الحقيقي؟ ما هي قواعد الأخلاق الحميدة؟ هل هناك حالات يمكن فيها استخدام واحد فقط؟