我知道打字稿是强类型的,但为什么以下代码打印12
而不是3
?
function add_numbers(a: number, b: number){
return a + b;
}
var a = '1';
var b = 2;
var result = add_numbers(<number><any>a, b);
console.log(result);
答案 0 :(得分:4)
Typescript在编译时是强类型的,如果编写不好的代码,它就不能防止运行时错误。您已使用<any>
覆盖了类型以欺骗编译器,因此在函数运行时会执行向数字添加字符串的正常javascript行为。
如果您删除了使用<number><any>
的广告素材,您会发现TypeScript会捕获并标记您的错误。
答案 1 :(得分:1)
任何 类型在TypeScript类型系统中占有特殊位置。它为您提供了一个类型系统的逃生舱口,告诉编译器关闭它。 any与类型系统中的任何和所有类型兼容。这意味着可以为其分配任何内容,并且可以将其分配给任何内容。这在以下示例中进行了演示:
var power: any;
// Takes any and all types
power = '123';
power = 123;
// Is compatible with all types
var num: number;
power = num;
num = power;
参考:https://basarat.gitbooks.io/typescript/content/docs/types/type-system.html
答案 2 :(得分:1)
最后,打字稿总是转换为javascript,所以你要做的就是添加字符串&#39; 1&#39;和数字2. Javascript将数字转换为字符串,因为无法添加字符串和数字。
如果你为传递给函数的变量声明了一个类型,那么typescript转换器将输出一个错误:
var a: number = '1';
var b: number = 1;
add_numbers(a, b);
错误:
第一行类型不匹配
var a: string = '1';
var b: number = 1;
add_numbers(a, b);
错误:
函数调用中的参数类型错误