دونوں ڈیٹا کی شکل کو بیان کرتے ہیں اور اکثر ایک دوسرے کے قابلِ تبدیل ہوتے ہیں، لیکن ان کی مختلف صلاحیتیں ہیں۔
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 ہے — primitives، unions، tuples، mapped types۔ interface صرف object/function کی شکلوں کو بیان کرتا ہے۔
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 کی سہولت دیتے ہیں (متعدد اعلانات یکجا ہو جاتے ہیں) اور توسیع/اضافہ کرنے کا idiomatic طریقہ ہیں، بشمول تیسری فریق کی library کی اقسام میں اضافہ۔
interface Admin extends User { role: string; } // interface
type Admin2 = User & { role: string }; // type uses intersection
ایک عام رواج: object کی شکلوں اور public API کے لیے interface استعمال کریں (بہتر غلطی کے پیغام، قابلِ توسیع، قابلِ ملاپ) اور جب unions، tuples یا دیگر قسم کی کارروائیوں کی ضرورت ہو تو type استعمال کریں۔ مستقل مزاجی کے لیے ایک کو ڈیفالٹ کے طور پر منتخب کریں — بہت سی ٹیمز objects کے لیے interface کو ڈیفالٹ کرتے ہیں اور صرف اس کی اضافی طاقت کی ضرورت ہو تو type استعمال کرتے ہیں۔