W TypeScript tablice można ściśle typizować, określając typ elementów za pomocą zapisu type[] lub Array<type>. Na przykład:
let arr: number[] = [1, 2, 3];
Krotki to tablice o stałej długości i typach dla każdego elementu:
let tuple: [string, number] = ["age", 30];
Pułapki:
push nie jest zabroniony, ale wynik wykracza poza gwarantowaną typizację.Czy krotki w TypeScript mogą zawierać zmienną liczbę elementów i jak wpłynie to na typizację?
Odpowiedź: Tak, krotki mogą zawierać elementy pozostałe za pomocą składni ..., ale nadal wymagają ścisłej typizacji pozostałych elementów:
let tuple: [string, ...number[]] = ["id", 10, 20, 30];
Jednakże elementy przed ... muszą być określone, a typ reszty tablicy musi być jednorodny.
Historia
W projekcie e-commerce programista próbował zapisać w krotce [string, number] więcej niż dwa elementy za pomocą push. Nie spowodowało to błędu na etapie kompilacji, ale złamało działanie funkcji, która oczekiwała dokładnie dwóch elementów, co doprowadziło do błędów podczas analizy zamówień.
Historia
Funkcja zwracała krotkę [string, number], jednak konsument oczekiwał tablicy stringów. Mismatch typów spowodował trudną do wychwycenia usterkę, przez co do produkcji trafiły nieprawidłowe wartości.
Historia
Podczas migracji kodu z JavaScript do TypeScript użyto tablic zamiast krotek do zwracania wielu wartości różnych typów. Naruszyło to ścisłą typizację i doprowadziło do pojawienia się błędów w dalszym kodzie, który opierał się na kolejności i typie wartości.