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 getirirRequired<T> — T türündeki tüm özellikleri zorunlu hale getirirPick<T, K> — T türünden yalnızca K özelliklerini seçerOmit<T, K> — T türünden K özelliklerini hariç tutartype 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.
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 }
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".