ChatGPT解决这个技术问题 Extra ChatGPT

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

在 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

那么哪种方法更好呢?


R
Robert Penner

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

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

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

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

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

<string>as string 转换注解告诉 TypeScript 编译器在编译时将 page_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 发现了字符串数字转换问题。)


小心,如果 page_numbernull,这会将 window.location.hash 设置为 *字符串 "null"。 (我更喜欢一个错误:D)。
如果您不想让编译器抱怨,只需说 window.location.hash = <any>page_number;
当您想使用任何 String 方法(如 toLowerCase())时,必须使用 conversion(即 String(page_number))而不是 casting
此外,您可以使用模板字符串 `${page_number}`
J
Jeroen

使用 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();

不要将 toLocaleString 用于大数字,因为它像货币一样添加逗号。它将破坏标识符。
N
Nehal Damania

也可以在 typescript 中使用以下语法。注意反引号“`”

window.location.hash = `${page_number}`

它是一种 JavaScript 功能,而不是打字稿功能。我认为只使用 String(page_number) 会更干净
FWIW Typescript 已经用模板类型重载了这个语法
D
Devin Rhode

window.location.hash 是一个 string,所以这样做:

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

B
Binh Ho

这是一些简短的方法

any_type = "" + any_type; 
any_type = String(any_type); 
any_type = `${any_type}`;

s
saran3h

只需使用:page_number?.toString()


C
Community

常量 page_number = 3; window.location.hash = page_number 作为字符串; // 错误

“将 'number' 类型转换为 'string' 类型可能是一个错误,因为这两种类型都没有与另一种充分重叠。如果这是故意的,请先将表达式转换为 'unknown'。” -> 如果您尝试将数字类型转换为字符串,您将收到此错误。因此,首先将其转换为未知数,然后再转换为字符串。

window.location.hash = (page_number as unknown) 作为字符串; //正确方法