javascript - TypeScript genomför inte typkontroll för funktionsargument
Jag hade intrycket att TypeScript tillät dig att ta ett giltigt JavaScript-program och "tvinga" typer genom att göra några nyckelsymboler typ-säkra. Detta skulle sprida typerna genom alla användningar och få dig att uppdatera alla symbolsreferenser.
Detta verkar vara felaktigt. I följande exempel anropar makeDiv-funktionen en typad make-funktion utan att kontrollera parametertypen.
// 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!
Missar jag något här? Finns det ett sätt att tvinga fram "striktare" typkontroll? Eller är detta ett designbeslut gjort av TypeScript-skaparna?
Svar #1
Detta är ett designbeslut. Allt som inte uttryckligen har en typ blir implicit av typen any. any är kompatibel med alla typer.
var x:any = 123;
x = "bang";
För att förhindra implicit typning av en variabel till any finns det en kompilatorflagga (--noImplicitAny) som började med TypeScript 0.9.1
Om du kompilerar med detta alternativ kommer din kod inte att kompilera om du inte gör följande:
// 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);
}
