CodeBlanks Logo Icon CodeBlanks

Deep partial

Derinlemesine Partial uygulamasını öğrenirsin.

Deep partial nedir?

DeepPartial, normal Partial'ın aksine iç içe nesnelerin tüm alanlarını da opsiyonel yapar. Mapped type ve conditional type birleştirilerek yazılır: her alan için, eğer nesne ise recursive olarak DerinPartial uygulanır. Bu, derinlemesine yapılandırmayı tür güvenli hale getirir.

type DerinPartial<T> = {
  [K in keyof T]?: T[K] extends object
    ? DerinPartial<T[K]>
    : T[K];
};

Conditional ile nesne kontrolü

DeepPartial'da T[K] extends object koşulu, alanın nesne olup olmadığını kontrol eder. Nesne ise DerinPartial<T[K]> ile recursive uygulanır; değilse değer olduğu gibi opsiyonel yapılır. Bu sayede primitif alanlar korunurken iç içe nesneler derinlemesine işlenir.

Uygulama DeepPartial yaz ve kullan

DerinPartial adında bir recursive mapped type tanımla: <T> = { [K in keyof T]?: T[K] extends object ? DerinPartial<T[K]> : T[K] }. Ayarlar interface'i baslik: string ve alt: { renk: string } içersin. p değişkeni DerinPartial<Ayarlar> türünde ve değeri { baslik: "test", alt: { renk: "mavi" } } olsun. p.alt.renk değerini console.log ile yazdır.

Başlangıç kodu

index.ts
// DerinPartial adinda recursive mapped type tanimla
// her alan opsiyonel olsun, nesne ise recursive uygulansin
// Ayarlar interface tanimla
// p nesnesini DerinPartial ile tanimla
// p.alt.renk yazdir

Örnek çözüm

index.ts
type DerinPartial<T> = {
  [K in keyof T]?: T[K] extends object ? DerinPartial<T[K]> : T[K];
};
interface Ayarlar {
  baslik: string;
  alt: { renk: string; };
}
const p: DerinPartial<Ayarlar> = { baslik: "test", alt: { renk: "mavi" } };
console.log(p.alt.renk);

Beklenen çıktı

mavi

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 DeepPartial'ın normal Partial'tan farkı nedir?

  • Tür parametresi almaz
  • Daha hızlı çalışır
  • Yalnızca sayıları opsiyonel yapar
  • İç içe nesnelerin alanlarını da opsiyonel yapar Doğru cevap

Açıklama: Partial yalnızca üst düzey alanları opsiyonel yapar; DeepPartial iç içe nesnelere recursive olarak iner ve tüm alanları opsiyonel yapar.

2 Recursive DerinPartial çağrısı

Soru
type DerinPartial<T> = {
  [K in keyof T]?: T[K] extends object ? ____<T[K]> : T[K];
};
Cevap
type DerinPartial<T> = {
  [K in keyof T]?: T[K] extends object ? DerinPartial<T[K]> : T[K];
};

Açıklama: DeepPartial iç içe nesneler için kendini recursive olarak çağırır; DerinPartial<T[K]> ile alt nesneye uygulanır.

3 DeepPartial kavramları

Kavram Anlamı
Partial<T> Sadece üst düzey
DerinPartial<T> İç içe opsiyonel
keyof T T'nin anahtarları
extends object Nesne kontrolü

İleri seviye bölümündeki tüm dersler