ডিক্লেরেশন মার্জিং হল TypeScript একাধিক ডিক্লেরেশনকে একই নাম দিয়ে একটি একক ডেফিনিশনে একত্রিত করা। ইন্টারফেস, নেমস্পেস এবং কিছু অন্যান্য কনস্ট্রাক্ট স্বয়ংক্রিয়ভাবে মার্জ হয়।
ইন্টারফেস মার্জিং
interface Box { : ; }
{ : ; }
ডিক্লেরেশন মার্জিং হল TypeScript একাধিক ডিক্লেরেশনকে একই নাম দিয়ে একটি একক ডেফিনিশনে একত্রিত করা। ইন্টারফেস, নেমস্পেস এবং কিছু অন্যান্য কনস্ট্রাক্ট স্বয়ংক্রিয়ভাবে মার্জ হয়।
interface Box { : ; }
{ : ; }
আপনি যে লাইব্রেরি বা গ্লোবাল ভেরিয়েবলের মালিক নন তাতে টাইপ যোগ করার জন্য এটি:
// 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
টাইপ অ্যালিয়াসগুলি অনন্য; শুধুমাত্র ইন্টারফেস (এবং নেমস্পেস) মার্জ হয় — এক্সটেন্সিবল পাবলিক API শেপের জন্য interface ব্যবহার করার একটি মূল কারণ।
ডিক্লেরেশন মার্জিং হল মডিউল অগমেন্টেশন এর পর্দার পিছনে প্রক্রিয়া — Express রিকোয়েস্ট সম্প্রসারিত করা, window এ যোগ করা, লাইব্রেরি টাইপ কাস্টমাইজ করা, থিমিং সিস্টেম।
বাস্তব অ্যাপ টাইপিং এর জন্য এটি অপরিহার্য জ্ঞান যেখানে আপনাকে এমন টাইপ অভিযোজন করতে হবে যা আপনি নিয়ন্ত্রণ করেন না, তাদের ফোর্ক না করে।