Functies in TypeScript
Dit artikel legt functies in TypeScript uit.
YouTube Video
Functies in TypeScript
Functies in TypeScript zijn JavaScript-functies met toegevoegde typeannotaties. In TypeScript kun je robuustere code schrijven door duidelijk de typen invoer (parameters) en uitvoer (returnwaarden) voor functies te definiëren. Hieronder introduceren we de basis methoden voor het definiëren van functies en enkele kenmerken van functies in TypeScript.
Basisfunctie Definitie
1function add(x: number, y: number): number {
2 return x + y;
3}
4
5console.log(add(5, 10)); // 15
- De functie
add
neemt twee argumenten van het typenumber
en geeft een waarde terug van het typenumber
. - Het neemt twee argumenten,
x
eny
, beide van het typenumber
, met hun types expliciet gespecificeerd. - Het retourtype is ook gespecificeerd als
: number
.
Anonieme Functies (Functie-uitdrukkingen)
Anonieme functies en functie-uitdrukkingen kunnen ook in TypeScript worden gebruikt. Typen kunnen op dezelfde manier worden geannoteerd.
1const multiply = function (x: number, y: number): number {
2 return x * y;
3};
4
5console.log(multiply(3, 4)); // 12
- Je kunt een anonieme functie aan een variabele toewijzen en deze later aanroepen.
1const factorial = function fact(n: number): number {
2 if (n <= 1) return 1;
3 return n * fact(n - 1); // Can call itself recursively
4};
5
6console.log(factorial(5)); // 120
- Je kunt een benoemde functiedeclaratie gebruiken om recursieve aanroepen mogelijk te maken.
Pijlfuncties
Type-annotaties kunnen ook met pijlfuncties worden gebruikt.
1const subtract = (x: number, y: number): number => {
2 return x - y;
3};
4
5console.log(subtract(10, 4)); // 6
Deze code definieert een arrow-functie subtract
met typeannotaties, die twee getallen als argumenten neemt en hun verschil retourneert.
Optionele en Standaard Parameters
Parameters kunnen optioneel worden gemaakt of standaardwaarden krijgen.
Optionele Parameters
Het toevoegen van ?
na de parameternaam maakt het optioneel.
1function greet(name?: string): string {
2 return name ? `Hello, ${name}` : "Hello!";
3}
4
5console.log(greet()); // Hello!
6console.log(greet("Alice")); // Hello, Alice
Deze code accepteert een optioneel argument; als het argument wordt opgegeven, wordt er met de naam gegroet, anders wordt er een algemene begroeting geretourneerd.
Standaard Parameters
Je kunt ook standaardwaarden instellen voor parameters.
1function greetWithDefault(name: string = "Guest"): string {
2 return `Hello, ${name}`;
3}
4
5console.log(greetWithDefault()); // Hello, Guest
6console.log(greetWithDefault("Bob")); // Hello, Bob
Deze functie gebruikt "Guest" als standaardwaarde als er geen argument wordt doorgegeven, en groet met de opgegeven of standaardnaam.
Functie Type Definitie
Het is ook mogelijk om het type van de functie zelf te definiëren. Dit wordt bijvoorbeeld gebruikt bij het doorgeven van een functie als argument.
1type Operation = (x: number, y: number) => number;
2
3const addOperation: Operation = (x, y) => x + y;
4const multiplyOperation: Operation = (x, y) => x * y;
5
6console.log(addOperation(2, 3)); // 5
7console.log(multiplyOperation(2, 3)); // 6
Deze code definieert een functietype Operation
die twee getallen neemt en een getal retourneert, en gebruikt dit vervolgens om optel- en vermenigvuldigingsfuncties te maken en uit te voeren.
Wanneer er geen returnwaarde is (void
type)
Voor functies zonder returnwaarde, specificeer het type void
.
1function logMessage(message: string): void {
2 console.log(message);
3}
4
5logMessage("This is a message."); // This is a message.
Deze code definieert een void
functie logMessage
die een tekstbericht neemt en dit afdrukt naar de console zonder een waarde terug te geven.
Callbackfunctie
Een functie als argument aan een andere functie doorgeven en deze later uitvoeren wordt een callbackfunctie genoemd. Het wordt vaak gebruikt bij asynchrone verwerking en gebeurtenisafhandeling.
1function processData(callback: (data: string) => void): void {
2 const data: string = "Processed Data";
3 callback(data);
4}
5
6processData((result: string): void => {
7 console.log(result);
8});
In dit voorbeeld wordt een functie die een waarde naar de console uitvoert doorgegeven als een callbackfunctie.
Alternatief kun je een callbacktype definiëren met behulp van type
of interface
.
1type Callback = (data: string) => void;
2
3function processData(callback: Callback): void {
4 const data: string = "Processed Data";
5 callback(data);
6}
7
8processData((result: string): void => {
9 console.log(result);
10});
Het definiëren van een callbacktype met type
of interface
verbetert de herbruikbaarheid.
Functie Overloading
Met functie-overbelasting kun je functies definiëren met dezelfde naam maar met verschillende parameterlijsten. In TypeScript kun je meerdere functies met dezelfde naam definiëren en verschillende bewerkingen uitvoeren afhankelijk van de types en hoeveelheden parameters.
1// Overload Signature
2function double(value: number): number;
3function double(value: string): string;
4
5// Implementation Signature
6function double(value: number | string): number | string {
7 if (typeof value === "number") {
8 return value * 2;
9 } else if (typeof value === "string") {
10 return value + value;
11 }
12}
13
14console.log(double(10)); // 20
15console.log(double("Hello")); // HelloHello
In TypeScript wordt overloading als volgt bereikt:.
-
Overload-handtekening
- Definieert hoe de functie kan worden gebruikt (zijn handtekening). Door dit meerdere keren te schrijven, wordt overloading mogelijk.
-
Implementatie-handtekening
- Implementeert de daadwerkelijke functietekst. Dit deel wordt slechts één keer gedefinieerd en behandelt alle gevallen die in de overload-handtekeningen zijn opgegeven.
Regels voor Overloading
De volgende regels zijn van toepassing op functie overloading:.
-
Volgorde van Overload-handtekeningsdefinities
- Aangezien de evaluatie van boven naar beneden plaatsvindt, wordt aanbevolen om specifieke types eerst te definiëren, gevolgd door meer generieke types.
-
Compatibiliteit van de Implementatie-handtekening
- De implementatiesignatuur moet compatibel zijn met de argumenten en retourwaarden van alle overbelastingssignaturen.
-
Specificeer Details in Overbelastingssignaturen
- De implementatiesignatuur is vaak dubbelzinnig, dus details moeten in de overbelastingssignaturen worden gespecificeerd.
- Als alleen de implementatiesignatuur is gedefinieerd, zal de type-afleiding voor de functie onvoldoende zijn.
Samenvatting
Functies in TypeScript hebben de volgende kenmerken.
- Typeannotaties
- Door typen voor argumenten en returnwaarden te specificeren, kun je veiliger code schrijven.
- Anonieme functies en pijlfuncties
- Ze kunnen net als in JavaScript worden gebruikt, en het toevoegen van typeannotaties verbetert de typesveiligheid.
- Optionele en standaardparameters
- Je kunt de argumentenspecificatie flexibeler maken indien nodig.
- Functietype-definities
- Definieer het type van de functie zelf om typecontroles uit te voeren.
- Functie-overbelasting
- Je kunt verschillende argumenten ondersteunen met dezelfde functienaam.
Door deze te gebruiken, kun je duidelijke en robuustere code in TypeScript schrijven.
Je kunt het bovenstaande artikel volgen met Visual Studio Code op ons YouTube-kanaal. Bekijk ook het YouTube-kanaal.