TypeScript ondersteunt geen meerdere verklaringen van het lichaam van de constructeur in één klasse, zoals mogelijk is in veel OOP-talen. In plaats daarvan kun je meerdere constructor-signaturen (overloads) definiëren en vervolgens een enkel lichaam van de constructeur implementeren, waar je handmatig de argumenten ontleedt:
class User { name: string; age: number; constructor(name: string); constructor(name: string, age: number); constructor(name: string, age?: number) { this.name = name; this.age = age ?? 18; } } const u1 = new User('Alice'); // age = 18 const u2 = new User('Bob', 32); // age = 32
Belangrijke details:
"Is het mogelijk om de constructeur zo te implementeren?"
undefined
class Test { constructor(x: number) {} constructor(x: string) {} }
**Correcte antwoord:** Nee, deze code zal een fout oproepen: "Duplicate constructor implementation". In TypeScript is slechts één implementatie van het lichaam van de constructeur toegestaan, overloads worden weergegeven in de vorm van signaturen (zonder lichaam).
### Voorbeelden van echte fouten door onbekendheid met de nuances van het onderwerp.
---
> Verhaal
In het project probeerden ze een klasse met twee constructeurs met verschillende parameters te implementeren - door ervaring uit Java te kopiëren. Als gevolg daarvan gooit TypeScript een compilatiefout, het project compileert niet, en ze moesten snel overschakelen naar overloads in signaturen.
---
> Verhaal
Een van de teamleden schreef de constructeur van de klasse met overload, maar vergat om de optionele parameters te overwegen (hij verwerkte undefined niet). Dit leidde tot pogingen om naar niet-bestaande waarden te verwijzen en tot crashes bij het maken van instanties met de minimale set argumenten.
---
> Verhaal
Overloads van de constructeur waren gedeclareerd, maar het lichaam van de constructeur kwam niet overeen met de beschreven aanroepvarianten. In één geval was de tweede argument verplicht, terwijl deze in de signatuur optioneel was. Dit conflict werd niet onmiddellijk opgemerkt, maar kwam aan het licht tijdens het schrijven van eenheidstests en bemoeilijkte de debugging.