Umwandlung einer Zahl in eine Zeichenfolge in TypeScript

175

Welches ist der beste Weg (falls es einen gibt), um in Typescript von Zahl zu Zeichenfolge zu konvertieren?

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

In diesem Fall gibt der Compiler den Fehler aus:

Der Typ 'Nummer' kann nicht dem Typ 'Zeichenfolge' zugewiesen werden.

Weil location.hashist eine Zeichenfolge.

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

Welche Methode ist also besser?

Ma Jerez
quelle

Antworten:

294

"Casting" unterscheidet sich von der Konvertierung. In diesem Fall window.location.hashwird eine Zahl automatisch in eine Zeichenfolge konvertiert. Um einen TypeScript-Kompilierungsfehler zu vermeiden, können Sie die Zeichenfolgenkonvertierung selbst durchführen:

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

Diese Umwandlungen sind ideal , wenn Sie nicht ein Fehler wollen geworfen werden , wenn page_numberist nulloder undefined. Während page_number.toString()und page_number.toLocaleString()wird werfen, wann page_numberist nulloder undefined.

Wenn Sie nur konvertieren und nicht konvertieren müssen, können Sie dies in TypeScript in eine Zeichenfolge umwandeln:

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

Die Annotationen <string>oder as stringcast weisen den TypeScript-Compiler an, page_numberbeim Kompilieren als Zeichenfolge zu behandeln . Es wird zur Laufzeit nicht konvertiert.

Der Compiler beschwert sich jedoch, dass Sie einer Zeichenfolge keine Nummer zuweisen können. Sie müssten zuerst besetzen <any>, dann <string>:

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

Es ist also einfacher, nur zu konvertieren, wodurch der Typ zur Laufzeit und zur Kompilierungszeit verarbeitet wird:

window.location.hash = String(page_number); 

(Vielen Dank an @RuslanPolutsygan für das Problem mit dem Casting von Saitennummern.)

Robert Penner
quelle
1
Vorsicht, wenn dies der Fall page_numberist, nullwird window.location.hash* der String gesetzt "null". (Ich würde einen Fehler vorziehen: D).
Jeroen
Wenn Sie nicht möchten, dass sich der Compiler beschwert, sagen window.location.hash = <any>page_number;
Sie
1
Die Verwendung der Konvertierung (dh String(page_number)) anstelle des Castings ist erforderlich, wenn Sie StringMethoden wie z toLowerCase().
EricRobertBrewer
31

Einfach nutzen toStringoder toLocaleStringich würde sagen. So:

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

Diese werfen einen Fehler , wenn page_numberist nulloder undefined. Wenn Sie dies nicht möchten, können Sie das für Ihre Situation geeignete Update auswählen:

// 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
quelle
Verwenden Sie toLocaleString nicht für große Zahlen, da es wie eine Währung Kommas hinzufügt. Es wird Identifikatoren zerstören.
Obaid
7

Man kann auch die folgende Syntax in Typoskript verwenden. Beachten Sie den Backtick "` "

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

window.location.hash ist ein string, also mach das:

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

const page_number = 3;

window.location.hash = Seitennummer als Zeichenfolge; // Error

"Die Konvertierung des Typs 'number' in den Typ 'string' kann ein Fehler sein, da sich keiner der beiden Typen ausreichend mit dem anderen überschneidet. Wenn dies beabsichtigt war, konvertieren Sie den Ausdruck zuerst in 'unknown'." -> Diese Fehlermeldung wird angezeigt, wenn Sie versuchen, die Nummer in eine Zeichenfolge einzugeben. Konvertieren Sie es also zuerst in unbekannt und dann in Zeichenfolge.

window.location.hash = (Seitennummer als unbekannt) als Zeichenfolge; // Der richtige Weg

Anant Raj
quelle
-4

Verwenden Sie das Symbol "+", um eine Zeichenfolge in eine Zahl umzuwandeln.

window.location.hash = +page_number;
Bettaibi Nidhal
quelle
4
+Casts to Number
Doup
1
Nick Gallimore