Declaration merging ही TypeScript ची समान नाव असलेल्या अनेक घोषणा एकल व्याख्यामध्ये एकत्रित करण्याची क्षमता आहे. Interfaces, namespaces, आणि काही अन्य संरचना स्वयंचलितपणे merge होतात.
Interface merging
interface Box { : ; }
{ : ; }
Declaration merging ही TypeScript ची समान नाव असलेल्या अनेक घोषणा एकल व्याख्यामध्ये एकत्रित करण्याची क्षमता आहे. Interfaces, namespaces, आणि काही अन्य संरचना स्वयंचलितपणे merge होतात.
interface Box { : ; }
{ : ; }
हे असे आहे की तुम्ही ज्या libraries किंवा 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; }
}
कारण library चा Request/Options एक interface आहे, तुमची घोषणा merge होते त्यामध्ये संघर्षांऐवजी — तुम्हाला सुरक्षितपणे प्रकार विस्तृत करू देते जे तुम्ही संपादित करू शकत नाही.
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) merge होतात — interface वापरण्याचे मुख्य कारण विस्तारित सार्वजनिक API आकृत्यांसाठी.
Declaration merging ही module augmentation च्या मागे असलेली यंत्रणा आहे — Express requests विस्तृत करणे, window मध्ये जोडणे, library प्रकार कस्टमाइज करणे, theming systems.
ही वास्तविक अँप्लिकेशन्समध्ये टायपिंगसाठी आवश्यक ज्ञान आहे जेथे तुम्हाला ज्या प्रकार नियंत्रित करत नाही त्यांना अनुकूल करणे आवश्यक आहे, त्यांना फोर्क केल्याशिवाय.