Lanzar un número a una cadena en TypeScript

175

¿Cuál es la mejor manera (si hay una) para emitir de un número a una cadena en Typecript?

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

En este caso, el compilador arroja el error:

El tipo 'número' no es asignable para escribir 'cadena'

Porque location.hashes una cuerda.

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

Entonces, ¿qué método es mejor?

Ma Jerez
fuente

Respuestas:

294

"Casting" es diferente a la conversión. En este caso, window.location.hashconvertirá automáticamente un número en una cadena. Pero para evitar un error de compilación de TypeScript, puede hacer la conversión de la cadena usted mismo:

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

Estas conversiones son ideales si no desea que se produzca un error cuando page_numberes nullo undefined. Mientras que page_number.toString()y page_number.toLocaleString()lanzará cuando page_numbersea nullo undefined.

Cuando solo necesita convertir, no convertir, esta es la forma de convertir a una cadena en TypeScript:

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

Las anotaciones <string>o as stringemitir le dicen al compilador TypeScript que lo trate page_numbercomo una cadena en tiempo de compilación; no se convierte en tiempo de ejecución.

Sin embargo, el compilador se quejará de que no puede asignar un número a una cadena. Tendría que lanzar primero a <any>, luego a <string>:

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

Por lo tanto, es más fácil simplemente convertir, que maneja el tipo en tiempo de ejecución y tiempo de compilación:

window.location.hash = String(page_number); 

(Gracias a @RuslanPolutsygan por detectar el problema de transmisión del número de cadena).

Robert Penner
fuente
1
Cuidado, si page_numberes nullesto se establecerá window.location.hashen * la cadena "null". (Prefiero un error: D).
Jeroen
Si no quieres que el compilador se queje, solo diwindow.location.hash = <any>page_number;
Mouneer el
1
Es necesario utilizar la conversión (es decir String(page_number)) en lugar de la conversión cuando desee utilizar cualquier Stringmétodo, como toLowerCase().
EricRobertBrewer
31

Solo utilícelo toStringo toLocaleStringdiría. Entonces:

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

Estos arrojan un error si page_numberes nullo undefined. Si no quiere que pueda elegir la solución adecuada para su situación:

// 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
fuente
No use toLocaleString para números grandes, ya que agrega comas como una moneda. Destruirá los identificadores.
Obaid
7

También se puede usar la siguiente sintaxis en mecanografiado. Tenga en cuenta la marca de retroceso "` "

window.location.hash = `${page_number}`
Nehal Damania
fuente
5

window.location.hash es un string, así que haz esto:

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

const número_página = 3;

window.location.hash = número_página como cadena; // Error

"La conversión del tipo 'número' a tipo 'cadena' puede ser un error porque ninguno de los tipos se superpone lo suficiente con el otro. Si esto fue intencional, primero convierta la expresión a 'desconocido'". -> Obtendrá este error si intenta escribir el número a cadena. Entonces, primero conviértalo a desconocido y luego a cadena.

window.location.hash = (número_página como desconocido) como cadena; // forma correcta

Anant Raj
fuente
-4

Use el símbolo "+" para lanzar una cadena a un número.

window.location.hash = +page_number;
Bettaibi Nidhal
fuente
44
+se lanza al número
doup
1
Necesito echar un número a una cadena
Nick Gallimore