为什么打字稿会像字符串一样添加两个数字?
Why typescript adds two numbers like strings?
我知道 typescript 是强类型的,但为什么下面的代码打印 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);
any 类型在 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
Typescript 在编译时是强类型的,如果您编写糟糕的代码,它无法防止运行时错误。您已经使用 <any>
覆盖了类型来欺骗编译器,因此在您的函数运行时执行将字符串添加到数字的正常 javascript 行为。
如果您删除正在使用 <number><any>
进行的转换,您将看到 TypeScript 捕获并标记您的错误。
最后,typescript 总是被转换为 javascript,所以你所做的是添加字符串 '1' 和数字 2。 Javascript 将数字转换为字符串,因为无法添加字符串和数字。
如果您删除传递给函数的变量的类型,打字稿转译器将输出错误:
var a: number = '1';
var b: number = 1;
add_numbers(a, b);
错误:
type mismatch in first line
var a: string = '1';
var b: number = 1;
add_numbers(a, b);
错误:
wrong parameter type in function call
我知道 typescript 是强类型的,但为什么下面的代码打印 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);
any 类型在 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
Typescript 在编译时是强类型的,如果您编写糟糕的代码,它无法防止运行时错误。您已经使用 <any>
覆盖了类型来欺骗编译器,因此在您的函数运行时执行将字符串添加到数字的正常 javascript 行为。
如果您删除正在使用 <number><any>
进行的转换,您将看到 TypeScript 捕获并标记您的错误。
最后,typescript 总是被转换为 javascript,所以你所做的是添加字符串 '1' 和数字 2。 Javascript 将数字转换为字符串,因为无法添加字符串和数字。
如果您删除传递给函数的变量的类型,打字稿转译器将输出错误:
var a: number = '1';
var b: number = 1;
add_numbers(a, b);
错误:
type mismatch in first line
var a: string = '1';
var b: number = 1;
add_numbers(a, b);
错误:
wrong parameter type in function call