272

Which is the the best way (if there is one) to cast from number to string in Typescript?

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

In this case the compiler throws the error:

Type 'number' is not assignable to type 'string'

Because location.hash is a string.

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

So which method is better?

Jeroen
  • 60,696
  • 40
  • 206
  • 339
Ma Jerez
  • 4,887
  • 3
  • 23
  • 21

8 Answers8

440

"Casting" is different than conversion. In this case, window.location.hash will auto-convert a number to a string. But to avoid a TypeScript compile error, you can do the string conversion yourself:

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

These conversions are ideal if you don't want an error to be thrown when page_number is null or undefined. Whereas page_number.toString() and page_number.toLocaleString() will throw when page_number is null or undefined.

When you only need to cast, not convert, this is how to cast to a string in TypeScript:

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

The <string> or as string cast annotations tell the TypeScript compiler to treat page_number as a string at compile time; it doesn't convert at run time.

However, the compiler will complain that you can't assign a number to a string. You would have to first cast to <any>, then to <string>:

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

So it's easier to just convert, which handles the type at run time and compile time:

window.location.hash = String(page_number); 

(Thanks to @RuslanPolutsygan for catching the string-number casting issue.)

Robert Penner
  • 6,148
  • 1
  • 17
  • 18
  • 4
    Careful, if `page_number` is `null` this will set `window.location.hash` to *the string `"null"`. (I'd prefer an error :D). – Jeroen Feb 05 '16 at 06:22
  • If you don't want compiler to complain just say `window.location.hash = page_number;` – Mouneer Nov 29 '16 at 18:17
  • 2
    Using **conversion** (ie. `String(page_number)`) rather than *casting* is necessary when you want to use any `String` methods, like `toLowerCase()`. – EricRobertBrewer Nov 29 '16 at 21:25
  • Also, you can use template string `\`${page_number}\`` – Ollie Feb 21 '21 at 20:32
40

Utilize toString() or toLocaleString(), for example:

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

These throw an error if page_number is null or undefined. If you don't want that you can choose the fix appropriate for your situation:

// 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();
Jeroen
  • 60,696
  • 40
  • 206
  • 339
  • 3
    Do not use toLocaleString for large numbers as it adds commas just like a currency. It will destroy identifiers. – Obaid Mar 16 '20 at 13:20
16

One can also use the following syntax in typescript. Note the backtick " ` "

window.location.hash = `${page_number}`
Nehal Damania
  • 8,671
  • 9
  • 37
  • 52
10

This is some short ways

any_type = "" + any_type; 
any_type = String(any_type); 
any_type = `${any_type}`;
Binh Ho
  • 3,690
  • 1
  • 31
  • 31
7

window.location.hash is a string, so do this:

var page_number: number = 3;
window.location.hash = String(page_number); 
Devin Rhode
  • 23,026
  • 8
  • 58
  • 72
raneshu
  • 363
  • 2
  • 16
  • 46
3

Just use: page_number?.toString()

saran3h
  • 12,353
  • 4
  • 42
  • 54
3

Easiest way:

var num = 3; var str =`${num}`;

0

const page_number = 3;

window.location.hash = page_number as string; // Error

"Conversion of type 'number' to type 'string' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first." -> You will get this error if you try to typecast number to string. So, first convert it to unknown and then to string.

window.location.hash = (page_number as unknown) as string; // Correct way

Community
  • 1
  • 1
Anant Raj
  • 75
  • 1
  • 5