programowanieFrontend developer / Programista TypeScript

Jak realizuje się i do czego służy ścisła typizacja tablic i krotek (tuples) w TypeScript? Jakie są ich różnice i pułapki przy używaniu?

Zdaj rozmowy kwalifikacyjne z asystentem AI Hintsage

Odpowiedź

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];
  • Tablica: dopuszcza dowolną liczbę elementów tego samego typu.
  • Krotka: sztywno określa liczbę i kolejność typów. Pozwala na tworzenie struktur podobnych do rekordów lub zwracanie z funkcji wartości różnych typów.

Pułapki:

  • Przy używaniu metod tablic (push, pop) na krotkach push nie jest zabroniony, ale wynik wykracza poza gwarantowaną typizację.
  • Nieuważne rozszerzanie krotki prowadzi do "niebezpiecznego" kodu.
  • Destrukturyzacja krotek w funkcjach: błędnie określony typ lub długość spowoduje błąd.

Pytanie z pułapką

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.

Przykłady rzeczywistych błędów z powodu braku znajomości szczegółów tematu


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.