Avatar ·

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`. أرجو توضيح الفرق الحقيقي؟ ما هي قواعد الأخلاق الحميدة؟ هل هناك حالات يمكن فيها استخدام واحد فقط؟