Declaration merging è quando TypeScript combina più dichiarazioni con lo stesso nome in un'unica definizione. Le interfacce, i namespace e altri costrutti si uniscono automaticamente.
Unione di interfacce
interface Box { : ; }
{ : ; }
Declaration merging è quando TypeScript combina più dichiarazioni con lo stesso nome in un'unica definizione. Le interfacce, i namespace e altri costrutti si uniscono automaticamente.
interface Box { : ; }
{ : ; }
Questo è come aggiungi tipi a librerie o globali che non possiedi:
// 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; }
}
Poiché Request/Options della libreria è un interface, la tua dichiarazione si unisce ad esso invece di conflittare — permettendoti di estendere in sicurezza i tipi che non puoi modificare.
function greet() {}
namespace greet { export const version = "1.0"; }
greet.version; // "1.0" — namespace merged onto the function
type non può farlotype A = { x: number };
type A = { y: number }; // ❌ Error: duplicate identifier
Gli alias di tipo sono unici; solo le interfacce (e i namespace) si uniscono — un motivo chiave per utilizzare interface per forme API pubbliche estensibili.
Declaration merging è il meccanismo dietro l'aumento del modulo — estensione delle richieste Express, aggiunta a window, personalizzazione dei tipi di libreria, sistemi di tema.
È conoscenza essenziale per tipizzare app reali dove devi adattare i tipi che non controlli, senza fare fork di essi.