Trasmissione di un numero a una stringa in TypeScript


175

Qual è il modo migliore (se ce n'è uno) di trasmettere da un numero all'altro in Typescript?

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

In questo caso il compilatore genera l'errore:

Digitare 'numero' non è assegnabile per digitare 'stringa'

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?

Risposte:


294

"Casting" è diverso dalla conversione. In questo caso, window.location.hashconverte automaticamente un numero in una stringa. Ma per evitare un errore di compilazione TypeScript, puoi eseguire tu stesso la conversione della stringa:

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

Queste conversioni sono ideali se non si desidera che venga generato un errore quando page_numberè nullo undefined. Considerando che page_number.toString()e page_number.toLocaleString()lancerà quando page_numberè nullo undefined.

Quando devi solo trasmettere, non convertire, ecco come eseguire il cast su una stringa in TypeScript:

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

Le annotazioni <string>o as stringcast indicano al compilatore TypeScript di essere trattato page_numbercome una stringa in fase di compilazione; non viene convertito in fase di esecuzione.

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

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

Quindi è più semplice convertire, che gestisce il tipo in fase di esecuzione e di compilazione:

window.location.hash = String(page_number); 

(Grazie a @RuslanPolutsygan per aver risolto il problema del casting del numero di stringa.)


1
Attento, se page_numberè nullimpostato window.location.hashsu * la stringa "null". (Preferirei un errore: D).
Jeroen,

Se non si desidera compilatore di lamentarsi solo direwindow.location.hash = <any>page_number;
Mouneer

1
Usare la conversione (es. String(page_number)) Piuttosto che il cast è necessario quando vuoi usare qualsiasi Stringmetodo, come toLowerCase().
EricRobertBrewer,

31

Utilizzalo toStringo toLocaleStringdirei. Così:

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

Questi generano un errore se page_numberè nullo undefined. Se non vuoi che puoi 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();

Non utilizzare toLocaleString per numeri di grandi dimensioni poiché aggiunge virgole proprio come una valuta. Distruggerà gli identificatori.
Obaid,

7

Si può anche usare la seguente sintassi in dattiloscritto. Nota il backtick "` "

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

5

window.location.hash è un string, quindi fai questo:

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

0

const page_number = 3;

window.location.hash = page_number come stringa; // Errore

"La conversione del tipo 'numero' nel tipo 'stringa' può essere un errore perché nessuno dei due tipi si sovrappone sufficientemente con l'altro. Se questo era intenzionale, converti prima l'espressione in 'sconosciuto'." -> Questo errore viene visualizzato se si tenta di digitare il numero in stringa. Quindi, prima convertilo in sconosciuto e poi in stringa.

window.location.hash = (page_number come sconosciuto) come stringa; // Modo corretto


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.