Declaration merging, TypeScript'in aynı ada sahip birden fazla bildirimi tek bir tanımla birleştirmesidir. Interface'ler, namespace'ler ve bazı diğer yapılar otomatik olarak birleşir.
Interface birleştirme
interface Box { : ; }
{ : ; }
Declaration merging, TypeScript'in aynı ada sahip birden fazla bildirimi tek bir tanımla birleştirmesidir. Interface'ler, namespace'ler ve bazı diğer yapılar otomatik olarak birleşir.
interface Box { : ; }
{ : ; }
Size ait olmayan kütüphanelere veya global değişkenlere türler eklemenin yolu bu:
// 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; }
}
Kütüphanenin Request/Options'i bir interface olduğundan, sizin bildiriminiz bununla birleşir çatışmak yerine — düzenleyemediğiniz türleri güvenle genişletmenize izin verir.
function greet() {}
namespace greet { export const version = "1.0"; }
greet.version; // "1.0" — namespace merged onto the function
type neden bunu yapamaztype A = { x: number };
type A = { y: number }; // ❌ Error: duplicate identifier
Tür takma adları benzersizdir; yalnızca interface'ler (ve namespace'ler) birleşir — genişletilebilir genel API şekilleri için interface kullanmanın ana nedeni.
Declaration merging, module augmentation'ın ardındaki mekanizmadır — Express isteklerini genişletmek, window'a eklemek, kütüphane türlerini özelleştirmek, tema sistemleri.
Kontrol etmediğiniz türleri çatallamadan uyarlamanız gereken gerçek uygulamalar yazmak için gerekli bilgidir.