Menu

TypeScript String: Interpolation, mehrzeilig und contains

Mit Strings in TypeScript arbeiten: Interpolation mit Template-Literalen, mehrzeilige Strings, prüfen, ob ein String einen Teilstring enthält, die gängigen Methoden und ihre Rückgabetypen sowie String-Literaltypen.

Diese Seite enthält ausführbare Editoren - bearbeiten, ausführen und Ausgabe sofort sehen.

Ein TypeScript-String ist ein JavaScript-String mit dem Typ string. Für Interpolation schreibst du ein Template-Literal: Backticks mit ${expression}-Platzhaltern. Einfache und doppelte Anführungszeichen erzeugen einfache Strings ohne Interpolation.

Alle drei Schreibweisen ergeben denselben Typ, string. Das erste $ in $${...} ist ein wörtliches Dollarzeichen; nur ${ beginnt einen Platzhalter.

String-Interpolation

In ${ } kannst du eine Variable, eine Rechnung, einen Funktionsaufruf, einen ternären Ausdruck oder ein verschachteltes Template-Literal setzen. Der Wert wird so in einen String umgewandelt, wie String(value) es täte (ein symbol ist die Ausnahme: Es zu interpolieren ist der Compilerfehler TS2731, und zur Laufzeit würde ein TypeError geworfen; schreibe String(sym)).

Ein Objekt zu interpolieren ergibt [object Object], was fast nie gewollt ist. Wähle die Felder aus oder nutze JSON.stringify(obj).

Mehrzeilige Strings

Ein Template-Literal kann über mehrere Zeilen gehen. Die Zeilenumbrüche bleiben erhalten, ebenso jede Einrückung am Zeilenanfang, denn alles zwischen den Backticks gehört zum String.

Wenn die Einrückung deines Codes in den String gelangen würde, baue ihn mit einem Array und join("\n") oder lass die Zeilen des Template-Literals ganz links beginnen.

Prüfen, ob ein String einen Teilstring enthält

includes beantwortet die Frage „enthält er das?“ mit einem boolean. startsWith und endsWith prüfen Anfang und Ende. indexOf liefert die Position oder -1, wenn der Teilstring fehlt. Alle unterscheiden Groß und Kleinschreibung.

includes akzeptiert auch eine Startposition: file.includes("R", 1) sucht erst ab Index 1.

Gängige Methoden und ihre Typen

TypeScript kennt den Rückgabetyp jeder eingebauten Methode. Aufpassen musst du bei denen, die leer zurückkommen können, denn unter strict musst du null oder undefined behandeln, bevor du das Ergebnis verwendest.

MethodeRückgabeBeispiel
includes, startsWith, endsWithboolean"abc".includes("b") ist true
indexOf, lastIndexOfnumber (-1, falls nicht vorhanden)"abc".indexOf("c") ist 2
slice, substringstring"hello".slice(1, 3) ist "el"
splitstring[]"a,b".split(",") ist ["a", "b"]
trim, trimStart, trimEndstring" x ".trim() ist "x"
toUpperCase, toLowerCasestring"Ts".toUpperCase() ist "TS"
padStart, padEndstring"7".padStart(3, "0") ist "007"
replace, replaceAllstring"a-b-c".replaceAll("-", "") ist "abc"
repeatstring"ab".repeat(2) ist "abab"
atstring | undefined"abc".at(-1) ist "c"
matchRegExpMatchArray | null"a1".match(/\d/)
length (Eigenschaft)number"abc".length ist 3

Einfacher Indexzugriff, s[5], hat den Typ string, auch wenn der Index hinter dem Ende liegt (wo der Wert zur Laufzeit undefined ist). Die Compileroption noUncheckedIndexedAccess macht daraus stattdessen string | undefined.

Strings sind unveränderlich

Ein Zeichen lässt sich nicht an Ort und Stelle ändern. TypeScript meldet eine Zuweisung an einen Index als Fehler TS2542, Index signature in type 'String' only permits reading., und im JavaScript im Strict Mode, in das kompiliert wird, würde dieselbe Zuweisung zur Laufzeit einen TypeError werfen. Jede Methode, die einen String scheinbar ändert, gibt einen neuen zurück.

Wie du andere Werte in Strings oder Strings in Zahlen umwandelst, steht unter String in Zahl umwandeln.

String-Literaltypen

string akzeptiert jeden Text. Ein String-Literaltyp akzeptiert genau einen Wert, und eine Union davon ergibt eine enum-ähnliche Menge erlaubter Strings:

Die Literaltypen werden nur beim Kompilieren geprüft; zur Laufzeit würde label("deleted") trotzdem laufen und Post is deleted ausgeben, und genau das macht die zweite Zeile hier. Die Template-Literal-Syntax funktioniert auch auf Typebene, etwa type EventName = `on${string}`, das jeden String akzeptiert, der mit on beginnt.

Häufig gestellte Fragen

Wie funktioniert String-Interpolation in TypeScript?

Mit einem Template-Literal: Backticks mit ${expression}-Platzhaltern, etwa `Hello, ${name}!`. In den geschweiften Klammern funktioniert jeder Ausdruck, und das Ergebnis hat den Typ string. Einfache und doppelte Anführungszeichen interpolieren nicht.

Wie schreibe ich einen mehrzeiligen String in TypeScript?

Setze den Text in Backticks und brich die Zeilen im Quelltext um: Ein Template-Literal behält die Zeilenumbrüche und auch die Einrückung am Anfang jeder Zeile. Alternativ verbindest du ein Array von Zeilen mit .join("\n") oder nutzt \n in einem gewöhnlichen String.

Wie prüfe ich in TypeScript, ob ein String einen Teilstring enthält?

Rufe text.includes("part") auf, das ein boolean zurückgibt. Es unterscheidet Groß und Kleinschreibung, vergleiche also kleingeschriebene Strings, wenn das egal sein soll: text.toLowerCase().includes(part.toLowerCase()). startsWith und endsWith prüfen Anfang und Ende, und indexOf gibt die Position oder -1 zurück.

Unterscheiden sich Strings in TypeScript und JavaScript?

Nein, zur Laufzeit sind es dieselben JavaScript-Strings mit denselben Methoden. TypeScript ergänzt den Typ string, prüft, dass du nur existierende Methoden aufrufst, und kennt die Rückgabetypen, zum Beispiel, dass match null und at undefined zurückgeben kann.

Kann man ein Zeichen in einem TypeScript-String ändern?

Nein. Strings sind unveränderlich, und s[0] = "H" ist der Compilerfehler TS2542 (Index signature in type 'String' only permits reading). Baue stattdessen einen neuen String: "H" + s.slice(1).

Coddy programming languages illustration

Lerne mit Coddy zu programmieren

LOS GEHT'S