Pick<T, K> yardımcı türü, mevcut bir tür veya arayüzden belirli alanların seçerek kopyalanması sorununu çözmek için TypeScript'e eklenmiştir.
Geliştirme sırasında sıklıkla aynı veri yapılarının küçük farklılıklarla yeniden kullanıldığı durumlar vardır. Pick ortaya çıkmadan önce, gerekli alanları manuel olarak kopyalayarak yeni arayüzler oluşturmak zorundaydık. Bu, kodun tekrarına ve mevcut yapılardaki değişikliklerde hatalara yol açıyordu.
Büyük bir arayüzün sadece bir kısmını kullanarak işlevin giriş veya çıkış verilerini tip atamak gerekiyor. Böylece gereksizlikten kaçınılarak sözleşmenin en çok özelleştirilmesi sağlanır.
Pick, T türünün alt kümesini K anahtarlarına göre seçme sorununu çözer:
type Pick<T, K extends keyof T> = { [P in K]: T[P] };
Örnek:
interface User { id: number; name: string; email: string; } type Credentials = Pick<User, 'email' | 'name'>; const creds: Credentials = { email: "user@example.com", name: "Kullanıcı Adı", };
Anahtar özellikler:
Pick ile Omit arasındaki fark nedir?
Pick, türün yalnızca belirtilen alanlarını seçer; Omit ise bunları yapının dışına çıkarır.
type PartialUser = Omit<User, 'id'>; // id dışında tüm alanlar
Pick ile mevcut olmayan bir özelliği seçmek mümkün mü?
Hayır, K anahtarları kesinlikle mevcut türün anahtarları olmalıdır, aksi takdirde derleme hatası meydana gelecektir.
Pick, opsiyonel veya readonly alanları etkileyebilir mi?
Pick, eğer mevcut türde varsa, özelliklerin değiştirme belirteçlerini (opsiyonel, readonly) korur; yalnızca bunları yeni bir türe kopyalar.
Veri giriş formu üzerinde çalışırken, geliştirici el ile kendi türünü tanımlamış ve User'a eklenen yeni zorunlu bir özniteliği unutmaktan dolayı form bozulmuştur. Arayüz güncellenince form çalışmaz oldu.
Artıları:
Eksileri:
Gerekli alanların formda seçilmesi için Pick kullanılıyor:
type FormFields = Pick<User, 'email' | 'name'>;
User'daki değişiklikler otomatik olarak formda yansır.
Artıları:
Eksileri: