打字稿在函数参数中没有强制执行类型

时间:2017-10-04 13:21:44

标签: typescript casting

我有这个非常简单的函数,接受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。

1 个答案:

答案 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; ,任何字面上的任何东西(任何类型)都不会对任何类型进行任何类型检查。

不要将anyobject混淆,如果您使用的是C#,那么任何类似于dynamic的类型都是在运行时确定的。

所以,表达

var sum:number = n1 + n2 + n3

实际上是

var sum:number = (n1 as any) + (n2 as any) + (n3 as any)