Partial<T> mekanizması TypeScript'te, nesnelerle çalışmayı kolaylaştırmak için tanıtılmıştır; bu nesnelerin özellikleri geçici olarak tanımlı olmayabilir. Tarihsel olarak, geliştiricilerin her bir özelliği isteğe bağlı hale getiren yeni türler oluşturması gerekiyordu; bu da kodun tekrarına ve hatalara yol açıyordu.
İlk başta, isteğe bağlı alanlara sahip nesneleri güncellemek veya oluşturmak için her isteğe bağlı özelliği açıkça belirtmek gerekiyordu; bu rahatsız ediciydi ve başlangıçtaki arayüzdeki değişiklikleri desteklemiyordu. Böylece Partial<T> utility tipi ortaya çıktı; bu, T tipinin tüm özelliklerini otomatik olarak isteğe bağlı hale getirir.
API tasarımında, genellikle nesnenin yalnızca bir kısmını güncellemek gerekir; geri kalan alanlar etkilenmemelidir. Bu özellikle PATCH talepleri, güncelleme formları ve yalnızca belirli verileri işleyen işlevler için geçerlidir. Partial olmadan tip içinde çalışmak karmaşık ve kırılgan hale gelebilir.
Partial<T> utility tipi şu şekilde tanımlanır:
// Basitleştirilmiş: type Partial<T> = { [P in keyof T]?: T[P] };
Bu şekilde, tüm özellikler isteğe bağlı hale gelir. Örnek:
interface User { id: number; name: string; email: string; } function updateUser(id: number, user: Partial<User>) { // ... } // Yalnızca değiştirilenler geçirilebilir updateUser(1, { email: "test@example.com" });
Ana özellikler:
Partial ile başlangıçta tüm arayüz alanlarını zorunlu hale getirmek mümkün mü?
Hayır, Partial tüm özellikleri isteğe bağlı hale getirir. Tersine bir görev için Required<T> tipi vardır.
Zaten isteğe bağlı özelliklerle Partial kullanıldığında ne olur?
Partial, zaten isteğe bağlı olan özellikleri değiştirmez; tüm alanlar isteğe bağlı kalır, Partial uygulamasından önce böyleydiler bile.
Örnek:
interface X { x?: number; y: string; } const a: Partial<X> = {}; // her iki özellik de şimdi isteğe bağlıdır
Sadece iç içe alanları isteğe bağlı hale getirmek için Partial kullanmak mümkün mü?
Partial, iç içe nesnelere özyinelemeli olarak uygulanmaz. Eğer tüm iç içe özellikleri isteğe bağlı hale getirmek gerekiyorsa, kendi Generic tipinizi yazmanız veya üçüncü taraf yardımcı programları kullanmanız gerekecek.
CRUD sisteminde updateUser, Partial<User> alır ve boş bir nesne geçirmeye izin verir; bu da çalışma zamanında hatalara neden olur: zorunlu alanlar silinir.
Artılar:
Eksiler:
Partial<User> yalnızca güncelleme giriş formunu tanımlamak için kullanılmaktadır. Nihai aşamada tüm alanlar doğrulanır ve veritabanına geçmeden önce orijinal nesneyle birleştirilir.
Artılar:
Eksiler: