Soru Tarihi:
JavaScript, bağlamı (this) ve argümanları geçirmek için bind, call ve apply yöntemlerini kullanmaya izin verir. TypeScript 3.2'den önce bu yöntemler daha az katı olarak kabul ediliyordu: argümanlarında fazla veya yanlış değerlerin geçmesine genellikle izin veriliyordu, bu da çalışma zamanında hatalara yol açıyordu. TypeScript, bu yöntemlerin imzalarını daha sıkı bir şekilde kontrol eden strictBindCallApply parametresini gerçekleştirdi.
Sorun:
Katı tip kontrolü olmadan bind/call/apply yöntemleri, fazla, eksik veya türü uyuşmayan argümanların geçmesine ve derleme aşamasında herhangi bir hata olmadan "kaçmasına" izin veriyordu.
Çözüm:
strictBindCallApply etkinleştirildiğinde, TypeScript derleyicisi aşağıdakileri katı bir şekilde talep eder:
Kod Örneği:
function sum(a: number, b: number): number { return a + b; } const sum2 = sum.bind(null, 1); sum2(2); // TAMAM sum2(2, 3); // strictBindCallApply'de HATA
Ana Özellikler:
strictBindCallApply sadece fonksiyonlar için mi çalışır, yoksa sınıf yöntemlerini de etkiler mi?
Hem fonksiyonlar hem de yöntemler için geçerlidir, çünkü bind/call/apply yöntemleri herhangi bir fonksiyonda mevcuttur (Function.prototype). Bu, bağımsız fonksiyonlar ve sınıf yöntemleri için de geçerlidir.
strictBindCallApply parametresi katı mod strict olmadan etkinleştirilebilir mi?
Hayır, onun etkinleştirilmesi için strict=true veya tsconfig.json’da strictBindCallApply=true doğrudan belirtilmelidir.
Eğer bind ile belirlenen işlevde tanımlanandan fazla parametre geçilirse ne olur?
strictBindCallApply etkinleştirildiğinde, TypeScript derleyicisi bir hata verir: "X argümanı bekleniyordu, ama Y alındı". Bu, yaygın bir hata olan uzun imza veya tesadüfen fazla değişkenlerin yakalanmasını korur.
** Negatif Durum Geliştirici, argümanları kısmi uygulamak için .bind kullanıyor, ama sayısında hata yaptı. Normal modda hatalar yok, ama prodüksiyonda fonksiyon fazla bir parametre ile çağrıldığında mantık bozuluyor.
Artılar:
Eksiler:
** Pozitif Durum strictBindCallApply etkinleştirildiğinde, fonksiyonlar ve yöntemler bind’i katı bir biçimde imzaya göre kullanır: fazla veya yanlış argümanlar derleme aşamasında elenir.
Artılar:
Eksiler: