In TypeScript können Arrays strikt typisiert werden, indem der Typ der Elemente durch type[] oder Array<type> angegeben wird. Zum Beispiel:
let arr: number[] = [1, 2, 3];
Tupel sind Arrays mit einer festen Länge und Typen für jedes Element:
let tuple: [string, number] = ["age", 30];
Fallstricke:
push nicht verboten, aber das Ergebnis überschreitet bereits die garantierte Typisierung.Können Tupel in TypeScript eine variable Anzahl von Elementen enthalten und wie wirkt sich das auf die Typisierung aus?
Antwort: Ja, Tupel können Rest-Elemente mit dem ...-Syntax enthalten, erfordern aber dennoch eine strikte Typisierung der verbleibenden Elemente:
let tuple: [string, ...number[]] = ["id", 10, 20, 30];
Allerdings müssen die Elemente vor ... angegeben werden, und der Typ für das übrige Array muss einheitlich sein.
Geschichte
In einem E-Commerce-Projekt versuchte ein Entwickler, mehr als zwei Elemente in das Tupel [string, number] mit push zu speichern. Dies führte nicht zu einem Fehler zur Kompilierungszeit, brach aber die Funktion, die genau zwei Elemente erwartete, was zu Fehlern bei der Bearbeitung von Bestellungen führte.
Geschichte
Eine Funktion gab ein Tupel [string, number] zurück, der Konsument erwartete jedoch ein Array von Strings. Der Typenkonflikt verursachte einen schwer fassbaren Fehler, wodurch inkorrekte Werte in die Produktion gelangten.
Geschichte
Bei der Migration von Code von JavaScript nach TypeScript wurden Arrays anstelle von Tupeln verwendet, um mehrere Werte unterschiedlichen Typs zurückzugeben. Dies verletzte die strikte Typisierung und führte zu Bugs im späteren Code, der sich auf die Reihenfolge und den Typ der Werte verließ.