Deklarationsfusion er TypeScript, der kombinerer flere deklarationer med samme navn til en enkelt definition. Interfaces, namespaces og nogle andre konstruktioner flettes automatisk.
Interfacesfusion
interface Box { : ; }
{ : ; }
Deklarationsfusion er TypeScript, der kombinerer flere deklarationer med samme navn til en enkelt definition. Interfaces, namespaces og nogle andre konstruktioner flettes automatisk.
interface Box { : ; }
{ : ; }
Sådan tilføjer du typer til biblioteker eller globale variable, du ikke ejer:
// 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; }
}
Fordi bibliotekets Request/Options er en interface, flettes din deklaration ind i den i stedet for at konfrontere — så du kan sikkert udvide typer, du ikke kan redigere.
function greet() {}
namespace greet { export const version = "1.0"; }
greet.version; // "1.0" — namespace merged onto the function
type ikke kan gøre dettetype A = { x: number };
type A = { y: number }; // ❌ Error: duplicate identifier
Typealiaser er unikke; kun interfaces (og namespaces) flettes — en vigtig grund til at bruge interface til udvidelige offentlige API-former.
Deklarationsfusion er mekanismen bag modulaugmentering — udvidelse af Express-anmodninger, tilføjelse til window, tilpasning af bibliotekstyper, temasystemer.
Det er væsentlig viden for typning af rigtige apps, hvor du skal tilpasse typer, du ikke kontrollerer, uden at forgrene dem.