Converter um número em uma string no TypeScript

175

Qual é a melhor maneira (se houver) de converter de número para string no Texto Dactilografado?

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

Nesse caso, o compilador lança o erro:

O tipo 'número' não pode ser atribuído ao tipo 'string'

Porque location.hashé uma string.

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

Então, qual método é melhor?

Ma Jerez
fonte

Respostas:

294

"Transmitir" é diferente de conversão. Nesse caso, window.location.hashirá converter automaticamente um número em uma string. Mas, para evitar um erro de compilação TypeScript, você mesmo pode fazer a conversão de string:

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

Essas conversões são ideais se você não deseja que um erro seja gerado quando page_numberé nullou undefined. Considerando page_number.toString()e page_number.toLocaleString()jogará quando page_numberé nullou undefined.

Quando você só precisa converter, não converter, é como converter em uma string no TypeScript:

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

As anotações <string>ou as stringcast dizem ao compilador TypeScript para tratar page_numbercomo uma string no tempo de compilação; não converte em tempo de execução.

No entanto, o compilador reclamará que você não pode atribuir um número a uma string. Você precisaria primeiro converter para <any>, depois <string>:

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

Portanto, é mais fácil converter, que lida com o tipo em tempo de execução e tempo de compilação:

window.location.hash = String(page_number); 

(Agradecemos a @RuslanPolutsygan por detectar o problema de transmissão do número da string.)

Robert Penner
fonte
1
Cuidado, se page_numberé nullisto irá definir window.location.hashaté * a corda "null". (Eu preferiria um erro: D).
Jeroen
Se você não quer que o compilador se queixe, digawindow.location.hash = <any>page_number;
Mouneer 29/11
1
O uso de conversão (ie. String(page_number)) Em vez de conversão é necessário quando você deseja usar qualquer Stringmétodo, como toLowerCase().
EricRobertBrewer
31

Basta utilizar toStringou toLocaleStringeu diria. Assim:

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

Isso gera um erro se page_numberfor nullou undefined. Se você não quiser, pode escolher a correção apropriada para sua situação:

// 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
fonte
Não use toLocaleString para números grandes, pois ele adiciona vírgulas como uma moeda. Isso destruirá identificadores.
Obaid
7

Pode-se também usar a seguinte sintaxe no texto datilografado. Observe o backtick "` "

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

window.location.hash é a string, faça o seguinte:

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

const page_number = 3;

window.location.hash = número_página como sequência; // Erro

"A conversão do tipo 'número' para o tipo 'sequência' pode ser um erro, porque nenhum deles se sobrepõe suficientemente ao outro. Se isso foi intencional, converta a expressão para 'desconhecido' primeiro." -> Você receberá esse erro se tentar digitar o número na string. Portanto, primeiro converta-o para desconhecido e depois para string.

window.location.hash = (número da página como desconhecido) como sequência; // Maneira correta

Anant Raj
fonte
-4

Use o símbolo "+" para converter uma string em um número.

window.location.hash = +page_number;
Bettaibi Nidhal
fonte
4
+lança ao número
doup 11/03/19
1
Necessidade de exercer um número para uma string
Nick Gallimore