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
Bu hata, atadığınız değerin tipi ile onu kabul edecek değişkenin, özelliğin veya fonksiyon parametresinin tipi uyuşmadığında ortaya çıkar. Hata mesajındaki kaynak ve hedef tipleri karşılaştırın; ardından değeri doğrulayarak dönüştürün, eksik alanları tamamlayın veya hedef tip gerçekten birden fazla değeri kabul ediyorsa tanımını düzeltin. Son olarak proje tip kontrolünü yeniden çalıştırarak hatanın giderildiğini doğrulayın.

Hata mesajında uyuşmayan tipleri bulun​


Örneğin Type 'string' is not assignable to type 'number' mesajında kaynak tip string, beklenen hedef tip ise number türüdür. Hata yalnız değişken atamasında değil, fonksiyona argüman gönderirken veya nesne oluştururken de görülebilir.

Editörde işaretlenen ifadeyi ve hata mesajının devamını inceleyin. Nesnelerde devam satırları çoğu zaman hangi özelliğin eksik olduğunu veya hangi özelliğin tipinin uyuşmadığını gösterir. Değerin tipini anlamak için ilgili değişkenin üzerine gelin; tip, doğrudan yazılmış bir tanımdan veya TypeScript’in değerden yaptığı çıkarımdan gelebilir.

Aşağıdaki durumlarda çözüm, verinin gerçekten neyi temsil ettiğine göre değişir:
UyuşmazlıkUygun yaklaşım
string → numberSayısal girdiyi doğrulayıp dönüştürün.
Eksik veya yanlış tipli nesne alanıVeriyi beklenen yapıya uygun oluşturun.
string | undefined → stringÖnce undefined durumunu ele alın.
string → belirli metin değerleriDeğeri doğrulayıp izin verilen seçeneklerden biri olarak daraltın.
Hedef tipi genişletmek her zaman çözüm değildir: Örneğin bir fonksiyon hesaplama yapıyorsa, yalnız hatayı susturmak için parametresini string | number yapmak fonksiyonun metin durumunu da işlemesini gerektirir.

Değeri doğrulayın ve uygun tipe dönüştürün​


Bir formdan gelen yaş bilgisinin metin olduğunu ve uygulamanın tam sayı beklediğini varsayalım. Aşağıdaki örneği bir TypeScript dosyasına koyabilirsiniz:

Kod:
function parseYas(girdi: string): number {
  const metin = girdi.trim();
  const yas = Number(metin);

  if (metin === "" || !Number.isInteger(yas) || yas < 0) {
    throw new Error("Geçerli bir yaş girin.");
  }

  return yas;
}

const formDegeri = "25";
const yas: number = parseYas(formDegeri);
console.log(yas); // 25

Burada Number metni sayıya dönüştürür; kontrol ise boş, tam sayı olmayan veya negatif girdiyi reddeder. Böylece yas değişkenine gerçekten sayı atanır. Geçersiz girdide fonksiyon hata fırlatır; gerçek bir formda bu hatayı yakalayıp kullanıcıya düzeltme isteği gösterin. Bu kontrol, yaşın uygulamanız için makul bir üst sınır içinde olduğunu tek başına kanıtlamaz; gerekiyorsa ayrıca sınır koyun.

Veri tipi aslında metin olmalıysa dönüşüm yapmak yerine hedef tanımı string olarak düzeltin. Örneğin başında sıfırlar bulunabilen bir kimlik, hesaplamada kullanılmıyorsa metin olarak saklanabilir.

Nesne alanlarını ve olası eksik değerleri düzeltin​


TypeScript nesneleri karşılaştırırken hedefin beklediği alanlara bakar. Örneğin { ad: string; yas: number } beklenen yere { ad: "Ada", yas: "25" } verirseniz, yas alanındaki metin sayı ile uyumlu değildir. Girdiyi yukarıdaki gibi doğrulayıp dönüştürerek nesneyi { ad: "Ada", yas: parseYas("25") } şeklinde oluşturabilirsiniz. Eksik bir zorunlu alan varsa onu da sağlayın; alan gerçekten bulunmayabiliyorsa hedef tipte isteğe bağlı tanımlayın ve kullanan kodda yokluğunu ele alın.

Benzer şekilde string | undefined, değerin metin veya undefined olabileceğini belirtir. Yalnızca string kabul eden yere göndermeden önce undefined durumunu kontrol edin. Boş metin geçerli bir varsayılan değer ise const ad = gelenAd ?? ""; kullanabilirsiniz; boş değer geçerli değilse kullanıcıdan değer isteyin veya işlemi durdurun.

Belirli seçeneklerden oluşan bir tipe genel bir string atarken de aynı ilke geçerlidir: Metnin gerçekten izin verilen seçeneklerden biri olduğunu karşılaştırmalarla doğrulayın. Tip tanımını bütün metinleri kabul edecek şekilde genişletmek, geçersiz seçenekleri de kabul ettirir.

Düzeltmeyi proje ayarlarıyla doğrulayın​


Dosyayı kaydedin. Projede TypeScript kurulu ve ilgili tsconfig.json mevcutsa proje kökündeki terminalde şu komutu çalıştırın:

Kod:
npx tsc --noEmit

Bu komut JavaScript çıktısı üretmeden proje tip kontrolünü çalıştırır. İlgili hata artık görünmüyorsa o kontrol kapsamında uyuşmazlık giderilmiştir; bu, uygulamanın tüm çalışma zamanı davranışının doğru olduğunu kanıtlamaz. Başka hatalar listelenirse her birinin dosyasını, satırını ve kaynak/hedef tiplerini aynı şekilde inceleyin. Birden fazla yapılandırma varsa ilgili projeyi npx tsc -p tsconfig.json --noEmit komutundaki dosya yolunu değiştirerek seçin.

Hata kaybolsun diye körü körüne as veya any kullanmayın. Tip iddiası as değeri çalışma zamanında dönüştürmez veya doğrulamaz; any ise ilgili tip kontrollerini zayıflatır. Özellikle dışarıdan gelen verileri kullanmadan önce gerçek içeriklerini doğrulayı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