ProgramlamaFullstack geliştirici

TypeScript'te 'utility types' nedir (örneğin, Partial, Required, Pick, Omit), nerede ve nasıl uygulanmalıdır ve kullanımında sık yapılan hatalar nelerdir?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap

Utility types — TypeScript'in mevcut türlerden türetilmiş türler oluşturmak, dönüştürmek veya değiştirmek için kullanılan yerleşik araçlarıdır. En yaygın olanlar:

  • Partial<T> — T türündeki tüm özellikleri isteğe bağlı hale getirir
  • Required<T> — T türündeki tüm özellikleri zorunlu hale getirir
  • Pick<T, K> — T türünden yalnızca K özelliklerini seçer
  • Omit<T, K> — T türünden K özelliklerini hariç tutar

Kullanım örneği:

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

Bu, daha esnek API'ler ve DTO'lar oluşturmaya olanak tanır.

İkna edici bir soru

Eğer bir tür özelliği isteğe bağlı olarak belirtilmişse (age?: number), Required<T> nasıl davranır? İsteğe bağlı kalır mı?

Cevap: Hayır, Required<T> T türündeki tüm özellikleri, isteğe bağlı olanlar da dahil, zorunlu hale getirir.

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

Gerçek hata örnekleri ve konunun inceliklerini bilmemek


Hikaye

Partial<T> kullanarak nesneleri güncellerken, bunun otomatik olarak veritabanı için güvenli olduğunu düşündük. Null/undefined alanlarını kontrol etmeyi unuttuk ve varlıkları güncellerken doğrulama hataları aldık.


Hikaye

Teknik özellikleri sorgu türünden çıkarmak için Omit<T, K> kullandık, ancak modelin yeniden yapılandırılmasında yeni teknik alanların hariç tutma listesine eklenmediğini göz önünde bulundurmadık. Sonuç olarak, özel alanlar API üzerinden "sızdı".


Hikaye

Shared kütüphanede Pick<T, K> türünü oluşturduk, anahtarlar listesindeki hata nedeniyle K kısmen orijinal türde yoktu. TypeScript, literal dizgiler kullanırken hatayı göz ardı etti, ancak orijinal tür değiştirildiğinde uyumsuzluk oluştu ve tüm hizmetlerde bazı türler "bozuldu".