ProgramlamaFrontend Geliştirici

TypeScript'te Pick nasıl çalışır, bu yardımcı tür ne için gereklidir ve Omit'ten farkı nedir?

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

Cevap.

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.

Sorunun Tarihi

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.

Problem

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.

Çözüm

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:

  • Sadece gerekli anahtarlarla yeni bir tür oluşturur;
  • Seçim talepleri, formlar, çıktıların tiplenmesi için oldukça uygundur;
  • Manuel kod ve hata miktarını minimize eder.

Kandırmaca Soruları.

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.

Tipik Hatalar ve Anti-Desenler

  • Pick'te anahtarları açık şekilde string olarak listelemek, ("id, name"), derleme hatalarına yol açar.
  • Mevcut olmayan alanları seçmek veya anahtarların yanlış otomatik üretimi.
  • Pick'in gerekli olduğu yerde, özelliklerin dışlanması veya değiştirilmesi gerektiğinde Omit, Partial, Required kullanımı gerekir.

Gerçek Dünya Örneği

Ters Durum

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ı:

  • Yapının açık bir tanımı.

Eksileri:

  • Typedef'in eski olma riski, refaktoring sırasında hata olasılığının yüksekliği.

Olumlu Durum

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ı:

  • Türlerin garantili senkronizasyonu.

Eksileri:

  • İş mantığına desteklenmeyen fazla alanların seçilmemesini kontrol etmek gerekir.