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?

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.)


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();

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}`

5

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

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

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


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.