type و interface
Type Aliases and Interfaces
type و interface — Type Aliases and Interfaces
في TypeScript يمكنك تسمية شكل الكائن باستخدام type أو interface. كلاهما مناسب لوصف object shape في معظم الحالات اليومية. interface User { id: number; name: string } وtype User = { id: number; name: string } سيخدمانك غالباً. الأهم من الجدل بينهما أن تسمي الشكل عندما يتكرر أو يمثل مفهوماً في المجال.
استخدم type عندما تحتاج unions أو تركيبات مثل Result<T>. واستخدم interface عندما تريد عقداً لكائن أو class ويمكن تمديده. في مشاريع كثيرة، يختار الفريق قاعدة موحدة. لا تجعل الاختيار يعطل العمل؛ الثبات أهم.
الفروق الجوهرية
| الناحية | type | interface |
|---|---|---|
| Union types | type Status = "ok" | "err" ✓ | لا يمكن |
| توسيع Declaration merging | لا يمكن إعادة فتحه | يمكن فتح نفس الـ interface مرة ثانية في ملف آخر (interface Window {...}) |
| التوسع extends | type B = A & { extra: string } | interface B extends A { extra: string } |
| Computed properties | type K = { [P in Keys]: string } ✓ | أقل مرونة في mapped types |
في الاستخدام اليومي الفرق ضئيل. القاعدة العملية: interface للكائنات في public APIs (لأن declaration merging مفيد أحياناً في مكتبات)، وtype لكل ما عداها خاصة unions وتركيبات الأنواع.
مثال عملي
لاحظ أننا استخدمنا interface للكائن وtype للـ union. هذا تقسيم عملي وسهل القراءة.
التسمية تصميم
عندما تسمي نوعاً، أنت تقول إن هذا الشكل مهم في المجال. لا تسم كل كائن مؤقت، لكن لا تكرر نفس الشكل في خمس دوال.