5

我的印象是,TypeScript 允许您采用有效的 JavaScript 程序并通过使一些关键符号类型安全来“强制”类型。这将通过所有用法传播类型,并使您更新所有符号引用。

这似乎是不正确的。在以下示例中,该makeDiv函数正在调用类型化make函数而不检查参数类型。

// 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!

我在这里想念什么吗?有没有办法强制执行“更严格”的类型检查?或者这是 TypeScript 创作者做出的设计决定?

4

1 回答 1

5

这是一个设计决定。任何没有显式类型化的东西都会被隐式类型化为 type anyany兼容所有类型。

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

为了防止变量的隐式类型存在,从 TypeScript 0.9.1 开始any有一个编译器标志 ( )--noImplicitAny

如果您使用此选项进行编译,您的代码将无法编译 ,除非您这样做:

// 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);
}
于 2013-08-19T04:23:58.260 回答