Salvo

WFN Üye
Konular
1,759
Mesajlar
1,781
Çözüm
0
Ticaret Puanı
0
Üyelik
6 Ay 17 Gün
Konum
İstanbul
Web Sitesi
Yok
Alanı
Belirtmemiş
1/1
Konu sahibi
Opsiyonel bir alanı kullanmadan önce değerini undefined ile karşılaştırabilir, yalnızca alanın nesnede bulunup bulunmadığını öğrenmek için in kullanabilirsiniz. Varsayılan değer gerekiyorsa ??, iç içe alanlara güvenli erişim için ?. uygundur. Bu seçenekler aynı sonucu vermez: Önce değerin mi, yoksa alanın varlığının mı önemli olduğuna karar verin.

Değeri kullanmadan önce kontrol edin​


Bir tür tanımında telefon?: string, telefon alanının bulunmayabileceğini belirtir. strictNullChecks açıkken TypeScript, alan okunurken sonucun string | undefined olabileceğini dikkate alır. Projenizin tsconfig.json dosyasında "strictNullChecks": true kullanabilir veya bu ayarı da etkinleştiren "strict": true seçeneğini açabilirsiniz.

Aşağıdaki varsayımsal örneği bir TypeScript dosyasına yazıp projenizin derleme ve çalıştırma yöntemiyle çalıştırabilirsiniz:

Kod:
interface Kullanici {
  ad: string;
  telefon?: string;
}

function telefonGoster(kullanici: Kullanici): void {
  if (kullanici.telefon !== undefined) {
    console.log(kullanici.telefon.toUpperCase());
  } else {
    console.log("Telefon belirtilmemiş");
  }
}

telefonGoster({ ad: "Ada", telefon: "abc" });
telefonGoster({ ad: "Ece" });

İlk çağrı ABC, ikincisi Telefon belirtilmemiş yazdırır. Koşulun doğru olduğu dalda TypeScript, alanın türünü string olarak daraltır; böylece metot güvenle çağrılabilir. Alanın boş metin olması da ilk dala girer. Boş metni ayrıca reddetmek istiyorsanız bunu iş kuralınıza göre ayrıca kontrol edin.

Alan telefon?: string | null olarak tanımlanmışsa yalnız undefined kontrolü yeterli değildir. telefon != null koşulu hem null hem undefined değerlerini dışlar.

Değer kontrolü ile alan varlığını ayırın​


Bir alan nesnede bulunabilir ama değeri undefined olabilir. Hangi soruyu yanıtlamak istediğinize göre yöntemi seçin:

İfade | Ne yapar?

alan!== undefined | Değerin undefined olmadığını kontrol eder.

"alan" in nesne | Alanı nesnede veya prototip zincirinde arar.

alan?? varsayılan | Değer null veya undefined ise varsayılanı kullanır.

| Alan null veya undefined ise erişimi durdurur.


Örneğin "telefon" in kullanici sonucu doğruysa anahtar bulunmuştur; bu, değerinin mutlaka kullanılabilir bir metin olduğunu kanıtlamaz. Bu ayrım özellikle eksik bir alanla açıkça undefined atanmış bir alanı farklı ele alırken önemlidir. Yalnız nesnenin kendi alanını aramak için Object.prototype.hasOwnProperty.call(kullanici, "telefon") kullanabilirsiniz.

if (kullanici.telefon) gibi doğruluk kontrolü ise undefined dışında boş metni de dışlar. Sayısal ve mantıksal alanlarda da sırasıyla 0 ve false değerlerini dışlayacağı için, bu değerler geçerliyse açık değer kontrolünü tercih edin.

Varsayılan değer ve iç içe alanlar​


Görüntülenecek bir değer üretmek istiyorsanız const telefon = kullanici.telefon ?? "Belirtilmemiş" kullanabilirsiniz. Alan eksikse veya değeri null ise varsayılan seçilir; boş metin korunur. Buna karşılık ||, boş metin ve 0 gibi diğer yanlış kabul edilen değerlerde de varsayılanı seçer.

İç içe opsiyonel bir alan için kullanici.profil?.sehir ifadesi, profil yoksa hata üretmeden undefined döndürür. Gerekirse sonuna ?? "Bilinmiyor" ekleyebilirsiniz. Opsiyonel zincirleme, var olan değerin beklenen türde olduğunu çalışma zamanında doğrulamaz; dışarıdan gelen veriyi kullanmadan önce ayrıca doğrulayın.

Sık sorulan sorular​

Opsiyonel alana açıkça undefined atanabilir mi?​

Varsayılan davranışta telefon?: string alanına undefined atanabilir. exactOptionalPropertyTypes etkinse bu atamaya izin vermek için türü telefon?: string | undefined olarak belirtmek gerekir. Bu ayar strictNullChecks gerektirir ve strict ile otomatik olarak açılmaz.

Alan adından sonra! kullanmak kontrol yerine geçer mi?​

Hayır. kullanici.telefon!, TypeScript’e değerin boş olmadığını sizin varsaydığınızı bildirir; çalışma zamanında kontrol yapmaz. Değer gerçekten yoksa ardından yapılan metot çağrısı hata üretebilir. Değerin varlığından emin değilseniz açık bir koşul kullanın.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Foruma git ?

Bu konuyu görüntüleyen kullanıcılar

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic