In TypeScript wordt functie-overbelasting bereikt door meerdere handtekeningen van de functie met verschillende typen en/of aantallen argumenten te declareren, maar met één implementatie.
Belangrijkste kenmerk: de implementatie is altijd één, en de compiler controleert of de aanroep overeenkomt met een van de gedeclareerde handtekeningen.
function greet(person: string): string; function greet(person: string, age: number): string; function greet(person: string, age?: number): string { if (age !== undefined) { return `Hallo, ${person}. Je bent ${age}!`; } else { return `Hallo, ${person}!`; } } greet('Alice'); // 'Hallo, Alice!' greet('Bob', 32); // 'Hallo, Bob. Je bent 32!'
⚠️ In tegenstelling tot C# of Java, zijn er geen meerdere implementaties van de functie — alle handtekeningen worden opgelost in één functie met verplichte controle binnenin.
Moet elke overbelaste handtekening in TypeScript als een aparte functie worden geïmplementeerd, zoals bijvoorbeeld in C#?
Antwoord: Nee! In TypeScript bestaat er maar één implementatie voor een overbelaste functie. Alle variaties worden gedefinieerd door een set handtekeningenvormingen. De implementatie moet verschillende varianten van de invoerparameters binnen één functie zelf verwerken.
Verhaal
Op een project heeft een ontwikkelaar twee functies met dezelfde naam gedeclareerd, in de veronderstelling dat er overbelasting zou plaatsvinden, zoals in Java. Uiteindelijk werkte alleen de laatst gedefinieerde functie, terwijl de andere "overschreven" waren. Dit leidde tot onverwachte fouten in de werking en enorme tijdsverspilling aan refactoring.
Verhaal
Er werd geen correcte typecontrole geïmplementeerd binnen de implementatie van de overbelaste functie. De functie gaf af en toe waarden van het verkeerde type terug dan verwacht door de klanten, wat het moeilijk maakte om de fout op te sporen omdat TypeScript de implementatie van overbelastingen niet valideert.
Verhaal
De implementatie van overbelasting werd alleen op typniveau gebruikt (handtekeningen gedeclareerd), maar er werd geen compatibiliteit met de runtime-implementatie gegarandeerd (ontbrekende optionele parameters en verwerkingen binnen de functie). Dit leidde tot crashes bij aanroepen met "type-valid" parameters, omdat de runtime deze varianten niet ondersteunde.