【问题标题】:Casting a number to a string in TypeScript在 TypeScript 中将数字转换为字符串
【发布时间】:2022-01-17 17:04:45
【问题描述】:

在 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

那么哪种方法更好呢?

【问题讨论】:

    标签: javascript casting typescript


    【解决方案1】:

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

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

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

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

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

    &lt;string&gt;as string 转换注解告诉 TypeScript 编译器在编译时将 page_number 视为字符串;它不会在运行时转换。

    但是,编译器会抱怨您不能为字符串分配数字。您必须先转换为&lt;any&gt;,然后转换为&lt;string&gt;

    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 = &lt;any&gt;page_number;
    • 使用 conversion(即String(page_number))而不是 casting 当你想使用任何 String 方法时是必要的,例如 @987654346 @.
    • 另外,您可以使用模板字符串`${page_number}`
    【解决方案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();
    

    【讨论】:

    • 不要将 toLocaleString 用于大数字,因为它像货币一样添加逗号。它将销毁标识符。
    【解决方案3】:

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

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

    【讨论】:

    • 这是一个 javascript 功能,而不是打字稿功能。我认为只使用 String(page_number) 会更干净
    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

      这是一些简短的方法

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

      【讨论】:

        【解决方案6】:

        const page_number = 3;

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

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

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

        【讨论】:

          猜你喜欢
          • 2013-01-18
          • 2021-06-27
          • 1970-01-01
          • 2021-06-19
          • 2019-03-10
          相关资源
          最近更新 更多