2015-09-13 10 views
55

Qual è il modo migliore (se ce n'è uno) per eseguire il cast da numero a stringa in Typescript?Trasferimento di un numero in una stringa in TypeScript

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

In questo caso il compilatore genera l'errore:

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

Perché location.hash è una stringa.

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

Quindi quale metodo è migliore?

risposta

99

"Casting" è diverso dalla conversione. In questo caso, window.location.hash convertirà automaticamente un numero in una stringa. Ma per evitare un errore tipografico di compilazione, si può fare la conversione della stringa da soli:

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

valori di conversione sono l'ideale se non si vuole un errore di essere gettato quando page_number è null o undefined. Mentre page_number.toString() e page_number.toLocaleString() vengono generati quando page_number è null o undefined.

quando avete solo bisogno di lanciare, non convertire, questo è come lanciare una stringa a macchina:

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

I <string> o as string annotazioni del cast dire al compilatore dattiloscritto per trattare page_number come una stringa in fase di compilazione tempo; non converte in fase di esecuzione.

Tuttavia, il compilatore si lamenterà che non è possibile assegnare un numero a una stringa. Si dovrà prima cast <any>, poi a <string>:

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

Così è più facile da convertire solo, che gestisce il tipo in fase di esecuzione e di compilazione:

window.location.hash = String(page_number); 

(grazie a @RuslanPolutsygan per rilevare il problema relativo al numero di stringhe.)

+0

sto ottenendo "Errore: (23, 32) TS2352: Nessuno dei due tipi 'numero' né digitare 'stringa' è assegnabile per l'altro". –

+1

Attenzione, se 'page_number' è' null' questo imposterà 'window.location.hash' a * la stringa' "null" '. (Preferirei un errore: D). – Jeroen

+0

Grazie a @RuslanPolutsygan, ho aggiornato la mia risposta per trasmettere a prima. –

17

Basta utilizzare toString o toLocaleString Direi. Quindi:

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

Queste gettano un errore se page_number è null o undefined. Se non vuoi che tu possa scegliere la correzione appropriata per la tua situazione:

// 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(); 
0

Utilizzare il simbolo "+" per trasmettere.

window.location.hash = +page_number;