programowanieFullstack developer

Co to są 'utility types' w TypeScript (np. Partial, Required, Pick, Omit), gdzie i jak należy je stosować oraz jakie błędy często popełniają przy ich użyciu?

Zdaj rozmowy kwalifikacyjne z asystentem AI Hintsage

Odpowiedź

Utility types — to wbudowane narzędzia TypeScript do przekształcania, modyfikowania lub uzyskiwania pochodnych typów na podstawie istniejących. Najczęściej spotykane:

  • Partial<T> — sprawia, że wszystkie właściwości typu T są opcjonalne
  • Required<T> — sprawia, że wszystkie właściwości są obowiązkowe
  • Pick<T, K> — wybiera z typu T tylko właściwości K
  • Omit<T, K> — wyklucza z typu T właściwości K

Przykład użycia:

type User = { id: number; name: string; age?: number }; type UserPreview = Pick<User, 'id' | 'name'>; type UserPatch = Partial<User>; type FullUser = Required<User>; type UserWithoutAge = Omit<User, 'age'>;

To pozwala na tworzenie bardziej elastycznych API i DTO.

Pytanie z podstępem

Jeśli właściwość typu jest określona jako opcjonalna (age?: number), jak będzie zachowywać się Required<T>? Czy pozostanie opcjonalna?

Odpowiedź: Nie, Required<T> przekształca wszystkie właściwości typu T, w tym opcjonalne, w obowiązkowe (wymagane).

type User = { age?: number }; type UserRequired = Required<User>; // UserRequired: { age: number }

Przykłady realnych błędów z powodu niewiedzy na temat złożoności tematu


Historia

Użyto Partial<T> do aktualizacji obiektów, zakładając, że to automatycznie jest bezpieczne dla bazy danych. Zapomniano sprawdzić pola na null/undefined i otrzymano błędy walidacji podczas aktualizacji encji.


Historia

Użyto Omit<T, K> do wykluczenia właściwości technicznych z typu zapytania, nie biorąc pod uwagę, że podczas refaktoryzacji modelu nowe właściwości techniczne nie zostały dodane do listy wykluczeń. W rezultacie prywatne pola "przeciekły" na zewnątrz przez API.


Historia

W bibliotece Shared stworzono typ Pick<T, K>, myląc się w liście kluczy: K częściowo nie było w oryginalnym typie. TypeScript pominął błąd przy użyciu dosłownych ciągów, ale przy zmianie oryginalnego typu pojawiła się niezgodność, a część typów "zepsuła się" we wszystkich serwisach.