كلاهما يصف شكل البيانات وغالباً ما يكونان قابلين للتبديل، لكن لديهما قدرات مختلفة.
ts
interface User { name: string; age: number; }
type User2 = { name: string; age: number; };
كلاهما يصف شكل البيانات وغالباً ما يكونان قابلين للتبديل، لكن لديهما قدرات مختلفة.
interface User { name: string; age: number; }
type User2 = { name: string; age: number; };
typeinterfacetype ID = string | number; // unions
type Pair = [number, number]; // tuples
type Name = User["name"]; // indexed/mapped/conditional types
type Nullable<T> = T | null; // wrap any type
type هو alias عام لأي نوع — البدائيات والـ unions والـ tuples والـ mapped types. بينما interface يصف فقط أشكال الكائنات والدوال.
interface أن يفعله بينما type لا يستطيعinterface Box { width: number; }
interface Box { height: number; } // declaration merging — both merge into one
// Box now has width AND height
تدعم Interfaces declaration merging (تتحد إعلانات متعددة) وهي الطريقة الموصى بها لتوسيع/تعديل أنواع المكتبات الخارجية.
interface Admin extends User { role: string; } // interface
type Admin2 = User & { role: string }; // type uses intersection
هناك اتفاقية شائعة: استخدم interface لأشكال الكائنات والـ APIs العامة (رسائل خطأ أفضل، قابلة للتوسع، قابلة للدمج)، واستخدم type عندما تحتاج إلى unions أو tuples أو عمليات نوع أخرى. اختر واحد كافتراضي للاتساق — العديد من الفرق تفضل interface للكائنات وتلجأ إلى type فقط عندما تكون قوته الإضافية ضرورية.