- Konu sahibi
- #1
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.
Örneğin
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:
Hedef tipi genişletmek her zaman çözüm değildir: Örneğin bir fonksiyon hesaplama yapıyorsa, yalnız hatayı susturmak için parametresini
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:
Burada
Veri tipi aslında metin olmalıysa dönüşüm yapmak yerine hedef tanımı
TypeScript nesneleri karşılaştırırken hedefin beklediği alanlara bakar. Örneğin
Benzer şekilde
Belirli seçeneklerden oluşan bir tipe genel bir
Dosyayı kaydedin. Projede TypeScript kurulu ve ilgili
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
Hata kaybolsun diye körü körüne
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ık | Uygun yaklaşım |
|---|---|
| string → number | Sayı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ğerleri | Değeri doğrulayıp izin verilen seçeneklerden biri olarak daraltın. |
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.