Typescript未使用函数参数强制执行类型

Typescript未使用函数参数强制执行类型,typescript,casting,Typescript,Casting,我有一个非常简单的函数,它接受3个整数,将它们相加,然后将求和结果打印到控制台 function add(n1, n2, n3) { var sum : number = n1 + n2 + n3; console.log(sum); } 我的假设是,sum是一个整数,因此它强制执行类型匹配。所以我试过这个 add(1,2,"Henok"); TypeScript并不抱怨,它只是打印出3Henok。为什么? 他在评论中回答说,他提到了两件事 实际上,您在那里写的是var

我有一个非常简单的函数,它接受3个整数,将它们相加,然后将求和结果打印到控制台

function add(n1, n2, n3) {
    var sum : number = n1 + n2 + n3;

    console.log(sum);
}
我的假设是,
sum
是一个整数,因此它强制执行类型匹配。所以我试过这个

add(1,2,"Henok");
TypeScript并不抱怨,它只是打印出
3Henok
。为什么?


他在评论中回答说,他提到了两件事


实际上,您在那里写的是var sum:number=(1,如有)+ (2如有)+('hehe3'如有),因为参数的类型是 未指定,它们默认为任何

为了执行编译时抱怨,他添加了这个建议

您可以在编译时启用noImplicitAny选项,tsc将 抱怨您没有正确键入代码


这对我很有用。谢谢您。

参数还应在typescript中指定类型,以便查看编译错误

function add(n1:number, n2:number, n3:number) {
    var sum : number = n1 + n2 + n3;

    console.log(sum);
}

add(1,2, "Henok"); // compilation error
多亏了托斯基

默认情况下,未标记任何类型的参数/变量被视为“any”,any实际上是any(any类型),并且不对任何类型执行类型检查

不要将
any
object
混淆,如果您使用的是类似于C的东西,那么any类似于
dynamic
,其中类型是在运行时确定的

那么,表情呢

var sum:number = n1 + n2 + n3
实际上是

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

嗯。。你是怎么做的?类型检查仅在编译时强制执行。在运行时,它只是javascript。@我知道这只是一个编译时检查。我把结果放在这里只是为了说它确实通过了“编译时检查”。值得一提的是,默认情况下,参数的类型是我知道的any,如果您编写
var sum:number=1+2+“Henok”;'它不工作(编译时错误),但不在函数内部。这是我不希望看到的。实际上你在那里写的是
var sum:number=(1为任意)+(2为任意)+('hehe3'为任意)
,因为没有指定参数的类型,它们默认为
any
Ohh,我看到了,我假设编译器在编译时而不是在运行时计算出正确的类型。您可以在编译时启用
noImplicitAny
选项,tsc将投诉您没有正确键入代码。:)