Modulelessen (2/2)
Arrays en tupels
In JavaScript kunnen arrays elk type elementen bevatten en dynamisch groeien of krimpen. TypeScript voegt statische typecontrole toe om ervoor te zorgen dat collecties homogeen blijven of een vaste typestructuur respecteren.
Arrays (homogene verzamelingen)
In TypeScript zijn er twee gelijkwaardige manieren om het type te definiëren van een array die elementen van hetzelfde type bevat:
-
Gebruik het elementtype gevolgd door vierkante haakjes (
[]):TSconst numbers: number[] = [1, 2, 3]; const strings: string[] = ['a', 'b', 'c']; -
Gebruik het algemene type
Array<T>:TSconst numbers: Array<number> = [1, 2, 3];
Beide syntaxis zijn volledig geldig, maar de eerste (type[]) is de conventionele en meest voorkomende stijl. Als u een ongeldige waarde probeert in te voegen (bijvoorbeeld numbers.push("hello") in een number[] array), genereert TypeScript een compileerfout.
Tupels (matrices met vaste lengte)
Een tuple is een speciaal type array met een vast aantal elementen, waarbij elk element een vooraf gedefinieerd specifiek type heeft op basis van zijn positie.
Om bijvoorbeeld een HTTP-antwoord op te slaan dat bestaat uit een statuscode (nummer) en een bericht (tekenreeks):
const response: [number, string] = [200, 'OK'];In dit geval:
- Het eerste element (
response[0]) moet eennumberzijn. - Het tweede element (
response[1]) moet eenstringzijn. - De array moet worden geïnitialiseerd met precies 2 elementen.
Alleen-lezen tupels (readonly)
Een belangrijk detail over tupels in TypeScript is dat het tijdens runtime normale JavaScript-arrays zijn. Dit betekent dat mutatieve methoden zoals .push() of .pop() technisch beschikbaar zijn en de lengte van de tupel kunnen veranderen, waarbij typecontroles gedeeltelijk worden omzeild.
Om dit gedrag te voorkomen en echte onveranderlijkheid af te dwingen, kunnen we de readonly modifier gebruiken:
const point: readonly [number, number] = [10, 20];
// point.push(30); // Compile-time error!Probeer het zelf
Oefening 1: Reeks getallen
Declareer een array met de naam scores die alleen getallen bevat en is geïnitialiseerd met de waarden 90, 85 en 95. Gebruik de expliciete typeannotatie voor de array. Gebruik geen enkel type.
Toon hint
Gebruik de syntaxis const scores: getal[] = ... of Array<getal>.
Oplossing beschikbaar na 3 pogingen
Oefening 2: 3D-coördinatentupel
Declareer een tupel met de naam punt dat een 3D-coördinaat vertegenwoordigt (drie getallen voor X, Y, Z) en is geïnitialiseerd met de waarden 10, 20, 30. Gebruik expliciete typeannotatie.
Toon hint
Het tupeltype moet [getal, getal, getal] zijn.
Oplossing beschikbaar na 3 pogingen
Oefening 3: Locatie-info Tupel
Declareer een tupel met de naam locationInfo die een geografische coördinaat met zijn naam vertegenwoordigt. Het moet bevatten: breedtegraad (getal), lengtegraad (getal) en de plaatsnaam (string). Initialiseer het met de waarden 41.9028, 12.4964 en 'Rome'.
Toon hint
Gebruik de syntaxis om een tupel met drie elementen te definiëren: [getal, getal, string].
Oplossing beschikbaar na 3 pogingen
Oefening 4: Tupel voor logboekinvoer
Declareer een tupel met de naam logEntry die een logregel vertegenwoordigt. Het moet in volgorde het volgende bevatten: een tijdstempel (nummer), een ernstniveau (tekenreeks) en een foutmelding (tekenreeks). Initialiseer het met tijdstempel 1716300000, niveau 'INFO' en het bericht 'Applicatie gestart'.
Toon hint
Gebruik de syntaxis om een tupel met drie elementen te definiëren: [getal, tekenreeks, tekenreeks] en wijs de opgegeven waarden toe.
Oplossing beschikbaar na 3 pogingen