给定一个数字的字符串表示,如何在TypeScript中将其转换为数字类型?

var numberString: string = "1234";
var numberValue: number = /* what should I do with `numberString`? */;

当前回答

就像在JavaScript中一样,您可以使用parseInt或parseFloat函数,或者简单地使用一元+运算符:

var x = "32";
var y: number = +x;

所有提到的技术都将具有正确的类型,并将正确解析简单的十进制整数字符串(如“123”),但对于其他可能的情况(如“123.45”)和角点情况(如null),它们的行为会有所不同。

此答案中的表格

其他回答

打字方式如下:

Number('1234') // 1234
Number('9BX9') // NaN

如这里所回答的:https://stackoverflow.com/a/23440948/2083492

就像在JavaScript中一样,您可以使用parseInt或parseFloat函数,或者简单地使用一元+运算符:

var x = "32";
var y: number = +x;

所有提到的技术都将具有正确的类型,并将正确解析简单的十进制整数字符串(如“123”),但对于其他可能的情况(如“123.45”)和角点情况(如null),它们的行为会有所不同。

此答案中的表格

如这里的其他答案所示,有多种方法进行转换:

Number('123');
+'123';
parseInt('123');
parseFloat('123.45')

不过,我想再提一件关于parseInt的事情。

使用parseInt时,始终传递基数参数是有意义的。对于十进制转换,即10。这是参数的默认值,因此可以省略它。对于二进制,它是2,十六进制是16。实际上,2和36之间的任何基数都有效。

parseInt('123')         // 123 (don't do this)
parseInt('123', 10)     // 123 (much better)

parseInt('1101', 2)     // 13
parseInt('0xfae3', 16)  // 64227

在一些JS实现中,parseInt将前导零解析为八进制:

尽管ECMAScript 3不鼓励使用ECMAScript5,但许多实现将以前导0开头的数字字符串解释为八进制。以下内容可能有八进制结果,也可能有十进制结果。始终指定基数以避免这种不可靠的行为。-多目标网络

代码变得更清晰是指定基数参数的一个很好的副作用。

因为parseFloat只解析基数为10的数字表达式,所以这里不需要基数参数。

更多信息:

为什么我们需要使用基数?(SO问题)所以回答“parseInt()和Number()之间的区别是什么?”

typescript需要知道我们的var a将是Number | | String

export type StringOrNumber = number | string;

export function toString (v: StringOrNumber) {
 return `${v}`;
}


export function toNumber (v: StringOrNumber) {
 return Number(v);
}

export function toggle (v: StringOrNumber) {
 return typeof v === "number" ? `${v}` : Number(v);
}

在解释Ryan所说的内容时,TypeScript概括了JavaScript的习惯用法。

var n = +"1"; // the unary + converts to number
var b = !!"2"; // the !! converts truthy to true, and falsy to false
var s = ""+3; // the ""+ converts to string via toString()

JavaScript类型转换中所有有趣的深入细节。