2016-09-13 57 views
7

JavaScript函数parseInt可用于强制给定参数的转换为整数使用parseInt函数()时,即参数是否是一个字符串,浮点数,号码等打字稿:错误多项

在JavaScript中,parseInt(1.2)会产生1没有错误,但是,在打字稿,它在编译过程中抛出一个错误说:

error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. 

我失去了一些东西在这里或者是从打字稿预期的行为?

+7

是的,这是雅的类型检查! –

+0

尝试'parseInt(“”+ 1.2 +“”)' – Mojtaba

+0

'parseInt([2,3])'返回'2'但这并不意味着你应该这样做... –

回答

11

不要使用parseInt做此操作 - 使用Math.floor

使用parseIntfloor一个数字并不总是会产生正确的结果。 parseInt(4e21)返回4,而不是4e21parseInt(-0)返回0,而不是-0

+0

我不认为这是正确的方式。这将产生一个没有小数部分的浮点数。但它实际上不是一个整数。例如,如果将其除以整数,您将会得到一个浮点数。 – cosmozhang

+0

问题要求'string |数字''Math.floor()'只需要'数字',这样也不起作用。 其中一个答案建议'数字()'哪些工作,但可能留给你一个小数位的数字。 'Math.floor(Number(stringOrNumber))'似乎是一个明智的选择,但'parseInt(“”+ row.c,10)'似乎有些可以接受。 – Forbesmyester

4

功能parseInt的确在第一个参数中预期为string。请检查the documentation。通常您可以省略第二个参数radix,然后它将回落到默认值10。但最安全的是始终将数字系统基础添加为第二个参数(通常为10)。

如果您想一个一般价值number,您可以使用Number功能,像这样。

var myNumber = Number(myGeneralValue); 
2

看打字:

parseInt(string: string, radix?: number): number; 
        ^^^^^^ 

的第一个参数必须是一个字符串。这是符合规格:

parseInt (string , radix)
parseInt函数产生根据指定基数通过的参数的内容解释系列所确定的整数值。

在正常的JS,第一个参数被强制转换为字符串的基础上,规范了以下规则:

  1. inputString是的ToString()。

这就是为什么parseInt(1.2)有效。

注意,规范允许基数undefined,这是一样的,在签名的radix?: number部分省略它,因此问号。在这种情况下,当然,它默认为10(除非字符串看起来像0xabc)。

正如其他答案中所提到的,parseInt不是最好的解决方案,无论如何,如果你真的想要做的是楼层或截断操作。

2

为什么你会在这种情况下使用parseInt?只需使用Math.floorMath.ceil即可。 parseInt需要一个字符串作为参数而不是数字。因此,您的错误

1

当'Math.floor'和'parseInt'之间的负数有不同的表现形式。

你应该使用这个: 1.2 | 0

或(1.2).toFixed(0)