我有这个非常简单的函数,接受3个整数,将它们加在一起并将总和输出到控制台。
function add(n1, n2, n3) {
var sum : number = n1 + n2 + n3;
console.log(sum);
}
我的假设是sum
是一个整数,因此它强制执行类型匹配。所以我试过这个。
add(1,2,"Henok");
TypeScript不会抱怨,它只是打印出3Henok
。为什么呢?
<小时/> 在 toskv 的评论中回答他提到了两件事
实际上你在那里写的是var sum:number =(1 as any)+ (2为任何)+(&#39; hehe3&#39; as any)因为参数的类型是 未指定,默认为任何
并强制编译时抱怨他添加了这个建议
你可以在编译和tsc时启用noImplicitAny选项 抱怨你没有正确输入你的代码。
这对我有用。谢谢toskv。
答案 0 :(得分:2)
参数还应指定typescript中的类型以查看编译错误。
function add(n1:number, n2:number, n3:number) {
var sum : number = n1 + n2 + n3;
console.log(sum);
}
add(1,2, "Henok"); // compilation error
感谢tosky
默认情况下,未标记任何类型的参数/变量被视为&#34;任何&#34; ,任何字面上的任何东西(任何类型)都不会对任何类型进行任何类型检查。
不要将any
与object
混淆,如果您使用的是C#,那么任何类似于dynamic
的类型都是在运行时确定的。
所以,表达
var sum:number = n1 + n2 + n3
实际上是
var sum:number = (n1 as any) + (n2 as any) + (n3 as any)