ProgrammatieFullstack ontwikkelaar

Wat zijn 'utility types' in TypeScript (bijv. Partial, Required, Pick, Omit), waar en hoe moeten ze worden toegepast, en welke fouten worden vaak gemaakt bij hun gebruik?

Slaag voor sollicitatiegesprekken met de Hintsage AI-assistent

Antwoord

Utility types zijn ingebouwde hulpmiddelen van TypeScript voor het transformeren, modificeren of verkrijgen van afgeleide types op basis van bestaande types. De meest voorkomende zijn:

  • Partial<T> — maakt alle eigenschappen van type T optioneel
  • Required<T> — maakt alle eigenschappen verplicht
  • Pick<T, K> — selecteert alleen de eigenschappen K uit type T
  • Omit<T, K> — sluit de eigenschappen K uit type T uit

Voorbeeld van gebruik:

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'>;

Dit maakt het mogelijk om flexibele API's en DTO's te creëren.

Vragen met een valstrik

Als een eigenschap van het type is opgegeven als optioneel (age?: number), hoe zal Required<T> zich dan gedragen? Blijft het optioneel?

Antwoord: Nee, Required<T> transformeert alle eigenschappen van type T, inclusief optionele, naar verplichte (vereiste).

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

Voorbeelden van echte fouten door gebrek aan kennis van de nuances van het onderwerp


Verhaal

We hebben Partial<T> gebruikt voor het bijwerken van objecten, ervan uitgaande dat dit automatisch veilig was voor de database. We vergaten om velden te controleren op null/undefined en kregen validatiefouten bij het updaten van entiteiten.


Verhaal

We hebben Omit<T, K> gebruikt om technische eigenschappen uit het aanvraagtype uit te sluiten, niet in aanmerking nemend dat bij het refactoren van modellen nieuwe technische velden niet aan de lijst van uitzonderingen waren toegevoegd. Uiteindelijk "lekten" privé-velden naar buiten via de API.


Verhaal

In de Shared-bibliotheek hebben we een type Pick<T, K> gemaakt, en vergisten we ons in de lijst van sleutels: K ontbrak gedeeltelijk in het originele type. TypeScript heeft de fout genegeerd bij het gebruik van letterlijke tekenreeksen, maar toen het originele type veranderde, ontstond er een discrepantie en "braken" sommige types in alle diensten.