Rzutowanie liczby na ciąg w TypeScript

175

Jaki jest najlepszy sposób (jeśli istnieje) na rzutowanie z liczby na ciąg w Typescript?

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

W tym przypadku kompilator zgłasza błąd:

Typu „liczba” nie można przypisać do typu „ciąg znaków”

Ponieważ location.hashjest to ciąg.

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

Więc która metoda jest lepsza?

Ma Jerez
źródło

Odpowiedzi:

294

„Przesyłanie” różni się od konwersji. W takim przypadku window.location.hashautomatycznie konwertuje liczbę na ciąg. Aby jednak uniknąć błędu kompilacji TypeScript, możesz samodzielnie wykonać konwersję ciągów:

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

Te konwersje są idealne, jeśli nie chcesz, aby błąd był generowany, gdy page_numberjest nulllub undefined. Natomiast page_number.toString()i page_number.toLocaleString()będzie rzucać, gdy page_numberjest nulllub undefined.

Gdy potrzebujesz tylko rzutować, a nie konwertować, oto jak rzutować na ciąg w TypeScript:

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

<string>Lub as stringoddane adnotacje poinformować kompilator maszynopis traktować page_numberjako ciąg znaków w czasie kompilacji; nie konwertuje w czasie wykonywania.

Jednak kompilator będzie narzekał, że nie można przypisać liczby do ciągu. Najpierw musisz rzucić na <any>, a potem <string>:

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

Więc łatwiej jest po prostu przekonwertować, który obsługuje typ w czasie wykonywania i kompilacji:

window.location.hash = String(page_number); 

(Podziękowania dla @RuslanPolutsygan za wychwycenie problemu z rzucaniem numerów ciągów).

Robert Penner
źródło
1
Ostrożny, jeśli page_numberto nullbędzie ustawiony window.location.hashna * napisu "null". (Wolałbym błąd: D).
Jeroen,
Jeśli nie chcesz, aby kompilator narzekał, po prostu powiedzwindow.location.hash = <any>page_number;
Mouneer
1
Używanie konwersji (tj. String(page_number)) Zamiast rzutowania jest konieczne, gdy chcesz użyć jakichkolwiek Stringmetod, takich jak toLowerCase().
EricRobertBrewer
31

Po prostu wykorzystaj toStringalbo toLocaleStringpowiedziałbym. Więc:

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

Te generują błąd, jeśli page_numberjest nulllub undefined. Jeśli nie chcesz, możesz wybrać poprawkę odpowiednią do Twojej sytuacji:

// 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
źródło
Nie używaj toLocaleString w przypadku dużych liczb, ponieważ dodaje przecinki, tak jak w przypadku waluty. To zniszczy identyfikatory.
Obaid
7

W maszynopisie można również użyć następującej składni. Zwróć uwagę na lewy znacznik „„ ”

window.location.hash = `${page_number}`
Nehal Damania
źródło
5

window.location.hash to a string, więc zrób to:

var page_number: number = 3;
window.location.hash = page_number.toString(); 
raneshu
źródło
0

const page_number = 3;

window.location.hash = numer_strony jako ciąg; // Błąd

„Konwersja typu„ liczba ”na typ„ ciąg ”może być błędem, ponieważ żaden z typów nie nakłada się w wystarczającym stopniu na inny. Jeśli było to zamierzone, najpierw przekonwertuj wyrażenie na„ nieznane ”." -> Otrzymasz ten błąd, jeśli spróbujesz wpisać liczbę do łańcucha. Więc najpierw przekonwertuj go na nieznany, a następnie na ciąg.

window.location.hash = (numer_strony jako nieznany) jako ciąg; // Właściwa droga

Anant Raj
źródło
-4

Użyj symbolu „+”, aby rzucić ciąg na liczbę.

window.location.hash = +page_number;
Bettaibi Nidhal
źródło
4
+
rzuty
1
Trzeba rzucić liczbę na strunę
Nick Gallimore,