在 TypeScript 中将数字转换为字符串

2022-08-30 00:36:54

在Typescript中从数字转换到字符串的最佳方法(如果有的话)是什么?

var page_number:number = 3;
window.location.hash = page_number; 

在这种情况下,编译器会引发错误:

类型“数字”不能分配给类型“字符串”

因为 是一个字符串。location.hash

window.location.hash = ""+page_number; //casting using "" literal
window.location.hash = String(number); //casting creating using the String() function

那么哪种方法更好呢?


答案 1

“转换”不同于转换。在这种情况下,将自动将数字转换为字符串。但是为了避免 TypeScript 编译错误,您可以自己执行字符串转换:window.location.hash

window.location.hash = ""+page_number; 
window.location.hash = String(page_number); 

如果您不希望在 is 或 时引发错误,则这些转换是理想的选择。而 和 将抛出时 是 或 。page_numbernullundefinedpage_number.toString()page_number.toLocaleString()page_numbernullundefined

当您只需要强制转换,而不需要转换时,这就是在TypeScript中强制转换为字符串的方法:

window.location.hash = <string>page_number; 
// or 
window.location.hash = page_number as string;

或强制转换的注释告诉 TypeScript 编译器在编译时将其视为字符串;它不会在运行时进行转换。<string>as stringpage_number

但是,编译器会抱怨您无法为字符串分配数字。您必须先将 转换为 ,然后转换为 :<any><string>

window.location.hash = <string><any>page_number;
// or
window.location.hash = page_number as any as string;

因此,只需转换(在运行时和编译时处理类型)就更容易了:

window.location.hash = String(page_number); 

(感谢@RuslanPolutsygan捕获字符串号转换问题。


答案 2

利用 toString()toLocaleString(),例如:

var page_number:number = 3;
window.location.hash = page_number.toLocaleString();

如果 是 或,则这些抛出错误。如果您不希望这样做,则可以选择适合您的情况的修复程序:page_numbernullundefined

// Fix 1:
window.location.hash = (page_number || 1).toLocaleString();

// Fix 2a:
window.location.hash = !page_number ? "1" page_number.toLocaleString();

// Fix 2b (allows page_number to be zero):
window.location.hash = (page_number !== 0 && !page_number) ? "1" page_number.toLocaleString();