function test(parm : number) {
console.log(parm);
}
var x = '12';
test(x); //does not compile as expected.
test(<any>x); //no error or warning.
为什么我最后一行没有出现编译错误?任何对文档的引用都会有所帮助。
TIA
答案 0 :(得分:2)
使用<any>x
您正在执行的操作是将变量x
转换为any
类型。也就是说,你告诉编译器&#34;嘿,在这个地方,我知道x
真的类型为any
!&#34; 。编译器假定您正确并使用您为该呼叫提供的新类型。
any
是TypeScript中的一种特殊类型 - 它意味着类型可以是任何类型,甚至可以更改类型!因此,编译器允许使用类型any
的变量而不是任何其他类型的变量。因此,虽然您的函数只接受number
类型的参数,但它也会接受any
类型的参数,因为当然any
可能是一个数字。
此行为显示在第3.8.4节中的language specification - 分配兼容性(第44-45页)中:
要求类型在某些情况下与赋值兼容 情况,例如赋值中的表达式和变量类型 语句以及函数调用中的参数和参数类型。小号 可分配给类型T,并且T可从S分配,如果其中之一 以下是真实的......:
- S和T是相同的类型。
- S或T是Any类型。
- ...
(强调我的)
答案 1 :(得分:2)