Functions
Functies met function keyword
Functies in TypeScript worden gedeclareerd met de function
keyword. De parameters van een functie worden gedeclareerd met hun naam en type. De return type van een functie wordt gedeclareerd na de parameters.
Dit is een functie die twee getallen optelt. De functie verwacht twee parameters van het type number
en geeft een number
terug.
Als je een functie hebt die geen return type heeft, dan kan je void
gebruiken. void
betekent dat de functie niets teruggeeft.
Je kan ook de void
keyword weglaten. Dit is hetzelfde als void
.
Let er op dat je de types van de parameters altijd moet declareren. Als je dit niet doet, dan zal TypeScript een foutmelding geven.
Optionele parameters
Stel dat we een multiply functie willen aanpassen dat ze ook toestaat om maar 1 argument mee te geven. Als we gewoon de 2de argument zouden weglaten krijgen we een foutmelding. Logisch ook want hij kan helemaal geen vermenigvuldiging doen met 1 getal.
Willen we dit toch toestaan dan kunnen we de 2de parameter optioneel maken. Dit doen we door een ?
te plaatsen na de naam van de parameter.
Uiteraard krijgen we nu een foutmelding. Dit komt omdat we de parameter b
niet altijd meegeven. Als we de functie aanroepen met 1 argument dan zal b
undefined
zijn. We kunnen dit oplossen door een check te doen of b
undefined
is.
Default parameters
Je kan ook een default waarde meegeven aan een parameter. Dit doe je door de waarde na de declaratie van de parameter te plaatsen.
Nu geeft de functie 5 terug als je maar 1 argument meegeeft. Dit komt omdat b
nu een default waarde heeft van 1.
Rest parameters
Soms wil je een functie schrijven die een onbepaald aantal parameters kan aannemen. Dit kan je doen door een rest parameter te gebruiken. Dit is een parameter die je voorafgaat met ...
. Je kan de rest parameter een naam geven. Dit is de naam van de array waarin alle parameters worden opgeslagen.
Arrow functions
Je hebt naast de function
keyword ook nog arrow functions. Dit zijn functies die je kan declareren met de pijl operator =>
. Je kan een arrow function gebruiken als je een functie wil declareren die je als parameter wil meegeven aan een andere functie (een callback functie). Dit is een veel voorkomend patroon in JavaScript en TypeScript.
Stel dat je de volgende functie hebt:
kan je die ook schrijven als een arrow function:
Merk op dat als we de functie willen kunnen aanroepen zoals hierboven, we de functie moeten declareren als een variabele. Op die manier kunnen we de functie aanroepen door de variabele aan te roepen met de nodige parameters.
De concepten van optionele parameters, default parameters en rest parameters zijn ook van toepassing op arrow functions.
Callback functies
Zoals we hierboven al vermeld hebben worden arrow functions vaak gebruikt als callback functies. Dit zijn functies die je als parameter meegeeft aan een andere functie. De functie die je meegeeft wordt dan uitgevoerd op een bepaald moment in de functie waar je de callback functie meegeeft.
Een ideaal voorbeeld hiervan is de forEach
functie op een array. Deze functie zal een callback functie uitvoeren voor elk element in de array.
Merk op dat we hier een arrow function meegeven aan de forEach
functie. Deze arrow function zal uitgevoerd worden voor elk element in de array. De waarde van het element wordt meegegeven als parameter aan de arrow function. Als we een arrow function meegeven zonder deze een naam te geven, dan noemen we die ook vaak een anonieme functie.
Stel je voor dat we zelf een functie willen schrijven die een array doorloopt en een callback functie uitvoert voor elk element in de array. We kunnen dit doen door een functie te schrijven die een array en een callback functie verwacht.
De functie hierboven heeft twee parameters: array`` en een
callbackfunctie. Je kan die op een heel gelijkaardige manier gebruiken zoals de ingebouwde
forEach` functie.
Maar let op! De callback parameter bevat nog altijd het any
type. Dit is niet wat we willen. We willen dat de callback functie een number
verwacht als parameter. Dit kunnen we doen door de callback parameter te declareren met het juiste type. Hiervoor moeten we een interface maken die de callback functie beschrijft.
We kunnen nu de callback parameter declareren met het type Callback
.
Geef je nu een callback functie mee die een parameter verwacht van een ander type dan number
, dan zal TypeScript een foutmelding geven.
Hier ook nog een voorbeeld van een callback functie die een return type heeft en meer dan 1 parameter verwacht.
We kunnen nu de calculate
functie gebruiken om een berekening uit te voeren met een callback functie. De berekening zelf wordt bepaald door de callback functie.
Als we nu de calculate functie willen uitvoeren maar we willen een vermenigvuldiging doen in plaats van een optelling, dan kunnen we een andere callback functie meegeven.
Verkorte syntax
Wanneer je maar 1 lijn code hebt staan in jouw functie, kan je jouw schrijfwijze verkorten:
Wanneer jouw lijn code maar 1 statement uitvoert, mag je de accolades weglaten:
Wanneer jouw lijn code een return doet, hoef je zelfs return niet meer te vermelden:
Wanneer je maar 1 parameter hebt, kan je zelfs de haakjes rond de parameter weglaten:
De verkorte syntax is vooral handig bij het gebruik van callback functies. Je kan dan de callback functie meegeven zonder de haakjes en accolades. We grijpen terug naar het voorbeeld van de forEach
functie.
Array methods
Je hebt al een aantal array methodes gezien zoals forEach
en hoe je deze gebruikt met een callback functie. Er zijn nog een aantal andere handige array methodes die je kan gebruiken.
map
De map
methode zal een nieuwe array teruggeven waarbij elk element van de originele array is vervangen door het resultaat van de callback functie.
Het type van element
is hetzelfde als het type van een element in de array. In dit geval is element
van het type number
. Je kan dit ook expliciet aangeven.
filter
De filter
methode zal een nieuwe array teruggeven waarbij alleen de elementen van de originele array worden behouden waarvoor de callback functie true
teruggeeft.
Ook hier kan je het type van element
expliciet aangeven.
reduce
De reduce
methode zal een enkele waarde teruggeven die het resultaat is van de callback functie. De callback functie verwacht 2 parameters: de accumulator en het huidige element. De accumulator is de waarde die wordt teruggegeven door de vorige uitvoering van de callback functie. Het huidige element is het huidige element van de array.
Het type dat de callback functie teruggeeft is hetzelfde als het type van de accumulator. In dit geval is dat number
. Je kan dit ook expliciet aangeven.
Het type van de accumulator is hetzelfde als het type van de initiele waarde die je meegeeft aan de reduce
methode. Als je geen initiele waarde meegeeft, dan zal de accumulator hetzelfde type hebben als het eerste element van de array.
Soms is het zelfs nodig om het type van de accumulator expliciet aan te geven omdat het type niet kan worden afgeleid.
Daarom is het altijd een goed idee om de types van de parameters van de callback functie expliciet aan te geven in een reduce
methode.
find
De find
methode zal het eerste element van de array teruggeven waarvoor de callback functie true
teruggeeft.
Het type van firstEven
is number | undefined
. Dit komt omdat de find
methode undefined
zal teruggeven als er geen element is gevonden waarvoor de callback functie true
teruggeeft. Zelfs als je zeker weet dat er altijd een element zal zijn dat voldoet aan de voorwaarde, moet je nog steeds undefined
in overweging nemen.
Last updated