javascript - TypeScript, fonksiyon argümanları için tip denetimi uygulamaz


TypeScript'in geçerli bir JavaScript programını alıp birkaç önemli sembolü tür açısından güvenli yaparak türleri 'zorlamanıza' izin verdiği izlenimine kapıldım. Bu, türleri tüm kullanımlara yayacak ve tüm sembol referanslarını güncellemenizi gerektirecekti.

Bu yanlış gibi görünüyor. Aşağıdaki örnekte makeDiv fonksiyonu, parametre türünü kontrol etmeden yazılmış bir make fonksiyonunu çağırıyor.

// strongly typed arguments
function make(tagName: string, className: string) {
    alert ("Make: " + className.length);
}

// no typing
function makeDiv(className) {
    // calling the typed function without type checking
    return make("div", className);
}

makeDiv("test"); 
makeDiv(6); // bang!

Burada bir şeyi mi kaçırıyorum? "Daha sıkı" tip kontrolü uygulamanın bir yolu var mı? Yoksa bu, TypeScript oluşturucuları tarafından alınmış bir tasarım kararı mı?

Cevap #1

Bu bir tasarım kararıdır. Açıkça yazılmamış olan herhangi bir şey, dolaylı olarak any türünde olacak şekilde yazılır. any, tüm türlerle uyumludur.

var x:any = 123;
x = "bang";

Bir değişkenin örtük türünün any olmasını önlemek için, TypeScript 0.9.1 ile başlayan bir derleyici bayrağı vardır (--noImplicitAny)

Bu seçenekle derlerseniz, kodunuz derlenmeyecek şu işlemleri yapmadığınız sürece:

// You need to explicitly mention when you want something to be of any type. 
function makeDiv(className:any) {
    // calling the typed function without type checking
    return make("div", className);
}

İlgili makaleler