String.Format funktioniert nicht in TypeScript.
Fehler:
The property 'format' does not exist on value of type
'{ prototype: String; fromCharCode(...codes: number[]): string;
(value?: any): string; new(value?: any): String; }'.
var myStr="This is an {0} for {0} purposes: {1}";
alert(myStr.format('example', 'end'));
Sie könnten auch bedenken String-Interpolation (eine Funktion von Template Strings), die eine Funktion von ECMAScript 6 ist – obwohl sie für die String.format Anwendungsfall müssen Sie es immer noch in eine Funktion einschließen, um einen Rohstring bereitzustellen, der das Format und dann Positionsargumente enthält. Es wird normalerweise inline mit den Variablen verwendet, die interpoliert werden, daher müssen Sie die Zuordnung mithilfe von Argumenten vornehmen, damit es für diesen Anwendungsfall funktioniert.
Zum Beispiel werden Formatzeichenfolgen normalerweise für die spätere Verwendung definiert … was nicht funktioniert:
// Works
var myFormatString = 'This is an {0} for {0} purposes: {1}';
// Compiler warnings (a and b not yet defines)
var myTemplateString = `This is an ${a} for ${a} purposes: ${b}`;
Um die Zeichenfolgeninterpolation anstelle einer Formatzeichenfolge zu verwenden, müssen Sie Folgendes verwenden:
function myTemplate(a: string, b: string) {
var myTemplateString = `This is an ${a} for ${a} purposes: ${b}`;
}
alert(myTemplate('example', 'end'));
Der andere häufige Anwendungsfall für Formatzeichenfolgen besteht darin, dass sie als gemeinsam genutzte Ressource verwendet werden. Ich habe noch keine Möglichkeit gefunden, eine Vorlagenzeichenfolge aus einer Datenquelle zu laden, ohne zu verwenden eval.
“JavaScript (und damit TypeScript) hat keine native String.Format-Funktion” – das ist eigentlich nicht richtig. Es gibt viele Dinge, die in TypeScript vorhanden sind die in JavaScript nicht existieren (das Gegenteil von dem, was Sie gesagt haben, ist jedoch wahr)
– Yann Duran
2. Mai ’15 um 11:58
@YannDuran können Sie mir ein Beispiel für ein natives Objekt geben, das in TypeScript erweitert wurde? Die Anweisung weist darauf hin, dass Sie zur Laufzeit genau dasselbe aufrufen werden String Objekt als jemand, der JavaScript verwendet.
– Fenton
2. Mai ’15 um 18:19
Ich habe nichts darüber gesagt, dass ein natives Objekt in TypeScript erweitert wird, ich sagte, dass Ihre Aussage, wie Sie sie geschrieben haben, falsch ist. Typ Skript ist a Supersatz von Javascript, daher gibt es viele Konstrukte, die in TypeScript existieren, die in Javascript nicht existieren. “Mit der Version 1.4 unterstützt TypeScript jetzt ES6-Vorlagenzeichenfolgen und kann sie auch in ES3/ES5-Ausdrücke kompilieren”. Sie würden stattdessen if string.format verwenden, um das gleiche Ergebnis zu erzielen.
– Yann Duran
3. Mai ’15 um 3:00
@YannDuran Ich habe den ersten Satz umformuliert, um zu versuchen, dass er noch funktioniert, wenn die Leute nur Teile davon isoliert lesen möchten. Vorlagenzeichenfolgen tun in JavaScript existieren. Wenn der Compiler für ältere Ziele ein Polyfill hinzufügt, ist es still fügt den nativen Objekten nichts hinzu – es fügt die Änderung inline ein oder fügt (seltener) eine speziell benannte Funktion hinzu. Vorlagenstrings erfüllen nicht alle Anwendungsfälle von String.format.
– Fenton
3. Mai ’15 um 7:36
@YannDuran Das Schlüsselwort war “nativ”. Wenn Sie den Kern dessen, was er gesagt hat, fallen lassen und dann sagen, dass Sie Recht haben, vielleicht sind Sie das, aber es hat nichts damit zu tun, worüber er sprach. Ich mag Drachen steigen lassen. Ich fliege gerne … siehst du den Unterschied?
– Eric Lease
2. Februar ’16 um 16:05
g.pickardou
Sie können verwenden Die native String-Interpolation von TypeScript für den Fall, dass Ihr einziges Ziel darin besteht, hässliche String-Verkettungen und langweilige String-Konvertierungen zu beseitigen:
var yourMessage = `Your text ${yourVariable} your text continued ${yourExpression} and so on.`
HINWEIS:
Auf der rechten Seite der Zuweisungsanweisung sind die Trennzeichen weder einfache noch doppelte Anführungszeichen, sondern a Sonderzeichen namens Backtick oder Grave Accent.
Der TypeScript-Compiler übersetzt Ihr spezielles Literal auf der rechten Seite in einen Zeichenfolgenverkettungsausdruck. Mit anderen Worten, diese Syntax basiert nicht auf der ECMAScript 6-Funktion, sondern auf einer nativen TypeScript-Funktion. Ihr generierter Javascript-Code bleibt kompatibel.
Ich konnte die String-Interpolation für die längste Zeit nicht zum Laufen bringen, bis ich Ihren Hinweis über das spezielle Häkchen sah und erkannte, was ich falsch machte.
Warum denkst du, dass
String.format
existiert out of the box?– Vision
19. November ’13 um 11:22
Wie kann ich String.format hinzufügen?
– Антон Степанов
19. November ’13 um 11:29