Modulelessen (2/2)
Verklaringen en samenvoeging
Typedeclaratiebestanden (met de extensie .d.ts) worden in TypeScript gebruikt om de vorm van bestaande JavaScript-code te beschrijven zonder enige echte logica te implementeren. Ze bevatten alleen typedefinities, interfaces en functiehandtekeningen.
Deze bestanden zijn essentieel bij het gebruik van bibliotheken van derden die in puur JavaScript zijn geschreven.
Declaratie samenvoegen
Declaratie samenvoegen is een gedrag waarbij de compiler twee of meer afzonderlijke declaraties met dezelfde naam samenvoegt tot één enkele definitie.
Het meest voorkomende geval is het samenvoegen van interface:
interface User {
name: string;
}
interface User {
age: number;
}
// The resulting User interface has both name and age properties!
const student: User = {
name: 'Alice',
age: 23,
};Als eigenschappen dezelfde naam hebben, moeten ze van hetzelfde type zijn, anders rapporteert TypeScript een fout.
Globale en externe modules aanpassen
We kunnen het samenvoegen van declaraties gebruiken om interfaces uit te breiden die in andere modules of in het globale bereik zijn gedefinieerd.
Als we bijvoorbeeld een eigenschap willen toevoegen aan het globale window object van de browser:
declare global {
interface Window {
analyticsToken: string;
}
}Door declare global te gebruiken, vertellen we TypeScript dat we een nieuwe handtekening in de bestaande globale Window interface injecteren.
Probeer het zelf
Oefening 1: Basisaangifte samenvoegen
In TypeScript worden interfaces met dezelfde naam in hetzelfde bereik automatisch samengevoegd. Declareer een interface-gebruiker met eigenschapsnaam: string, en declareer vervolgens in een tweede blok dezelfde interface-gebruiker en voeg de eigenschap age: number toe. Declareer ten slotte een constante gebruiker van het type Gebruiker met de juiste waarden.
Toon hint
Declareer interfacegebruiker tweemaal, voeg de respectieve eigenschappen in en wijs vervolgens de velden toe aan het gebruikersobject.
Oplossing beschikbaar na 3 pogingen
Oefening 2: De globale vensterinterface uitbreiden
Stel je voor dat je de globale Window-interface wilt uitbreiden om een aangepaste eigenschap met de naam config van het type Record<string, string> toe te voegen. Schrijf de juiste declaratie met behulp van declare global om de nieuwe eigenschap samen te voegen in de globale Window-interface.
Toon hint
Gebruik declare global { interface Window { config: Record<string, string>; } }.
Oplossing beschikbaar na 3 pogingen