Łączenie deklaracji to kombinowanie przez TypeScript wielu deklaracji o tej samej nazwie w jedną definicję. Interfejsy, przestrzenie nazw i niektóre inne konstrukty łączą się automatycznie.
Łączenie interfejsów
interface Box { : ; }
{ : ; }
Łączenie deklaracji to kombinowanie przez TypeScript wielu deklaracji o tej samej nazwie w jedną definicję. Interfejsy, przestrzenie nazw i niektóre inne konstrukty łączą się automatycznie.
interface Box { : ; }
{ : ; }
Tak dodajesz typy do bibliotek lub globalnych rzeczy, których nie posiadasz:
// 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; }
}
Ponieważ Request/Options biblioteki to interface, twoja deklaracja łączy się z nim zamiast kolidować — pozwalając bezpiecznie rozszerzać typy, których nie możesz edytować.
function greet() {}
namespace greet { export const version = "1.0"; }
greet.version; // "1.0" — namespace merged onto the function
type tego nie może zrobićtype A = { x: number };
type A = { y: number }; // ❌ Error: duplicate identifier
Aliasy typów są unikalne; tylko interfejsy (i przestrzenie nazw) się łączą — główny powód, aby używać interface dla rozszerzalnych publicznych kształtów API.
Łączenie deklaracji to mechanizm stojący za augmentacją modułów — rozszerzaniem żądań Express, dodawaniem do window, dostosowywaniem typów bibliotek, systemami tematyzacji.
To niezbędna wiedza do typowania prawdziwych aplikacji, gdzie musisz adaptować typy, których nie kontrolujesz, bez rozdzielania ich.