Declaration merging وہ ہے جہاں TypeScript متعدد ڈیکلیریشنز کو ایک ہی نام سے ایک واحد تعریف میں ملا دیتا ہے۔ Interfaces، namespaces، اور کچھ دوسری تعمیرات خود بخود ملتی ہیں۔
Interface ملانا
interface Box { width: ; }
{ : ; }
Declaration merging وہ ہے جہاں TypeScript متعدد ڈیکلیریشنز کو ایک ہی نام سے ایک واحد تعریف میں ملا دیتا ہے۔ Interfaces، namespaces، اور کچھ دوسری تعمیرات خود بخود ملتی ہیں۔
interface Box { width: ; }
{ : ; }
یہ ہے کہ آپ اپنے ملکیت سے باہر کی لائبریریوں یا globals میں اقسام شامل کریں:
// Add a custom property to Express's Request
declare global {
namespace Express {
interface Request { user?: { id: string }; } // merges into Express.Request
}
}
request.user; // ✅ now typed everywhere
// Augment a module
declare module "some-lib" {
interface Options { newOption: boolean; }
}
کیونکہ لائبریری کا Request/Options ایک interface ہے، آپ کی ڈیکلیریشن اس میں شامل ہو جاتی ہے بجائے تنازع کے — آپ کو ان اقسام کو محفوظ طریقے سے بڑھانے کی اجازت دیتا ہے جنہیں آپ ترمیم نہیں کر سکتے۔
function greet() {}
namespace greet { export const version = "1.0"; }
greet.version; // "1.0" — namespace merged onto the function
type یہ کیوں نہیں کر سکتاtype A = { x: number };
type A = { y: number }; // ❌ Error: duplicate identifier
Type aliases منفرد ہیں؛ صرف interfaces (اور namespaces) ملتے ہیں — وسیع ہونے والی عوامی API شکلوں کے لیے interface استعمال کرنے کی اہم وجہ۔
Declaration merging module augmentation کے پیچھے کا طریقہ ہے — Express requests میں توسیع کرنا، window میں شامل کرنا، لائبریری کی اقسام کو حسب ضرورت بنانا، تھیمنگ سسٹمز۔
حقیقی ایپلیکیشنز کو ٹائپ کرنے کے لیے ضروری علم ہے جہاں آپ کو ان اقسام کو موافقت پذیر بنانا ہوگا جن پر آپ کا کنٹرول نہیں ہے، بغیر انہیں تقسیم کیے۔