Menu

String w TypeScript: interpolacja, wiele linii i includes

Praca ze stringami w TypeScript: interpolacja w template literal, stringi wielolinijkowe, sprawdzanie, czy string zawiera podciąg, najczęstsze metody i zwracane przez nie typy oraz typy literałów stringowych.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

String w TypeScript to string JavaScriptu z typem string. Do interpolacji napisz template literal: backticki z placeholderami ${expression}. Apostrofy i cudzysłowy tworzą zwykłe stringi bez interpolacji.

Wszystkie trzy rodzaje cudzysłowów dają ten sam typ, string. Pierwszy $ w $${...} to zwykły znak dolara: placeholder zaczyna dopiero ${.

Interpolacja stringów

Wewnątrz ${ } możesz wstawić zmienną, obliczenie, wywołanie funkcji, operator warunkowy albo zagnieżdżony template literal. Wartość jest zamieniana na string tak samo, jak zrobiłoby to String(value) (wyjątkiem jest symbol: jego interpolacja to błąd kompilacji TS2731, a w czasie wykonania rzuciłaby TypeError, więc napisz String(sym)).

Interpolacja obiektu wypisuje [object Object], a to prawie nigdy nie jest to, czego chcesz. Wybierz konkretne pola albo użyj JSON.stringify(obj).

Stringi wielolinijkowe

Template literal może obejmować wiele linii. Znaki nowej linii zostają, podobnie jak wcięcie na początku każdej linii, bo wszystko między backtickami jest częścią stringa.

Gdy wcięcie kodu przeciekałoby do stringa, zbuduj go z tablicy przez join("\n") albo zacznij linie template literal od samego początku linii.

Sprawdzanie, czy string zawiera podciąg

includes odpowiada na pytanie „czy zawiera” wartością boolean. startsWith i endsWith sprawdzają początek i koniec. indexOf podaje pozycję albo -1, gdy podciągu nie ma. Wszystkie rozróżniają wielkość liter.

includes przyjmuje też pozycję startową: file.includes("R", 1) szuka dopiero od indeksu 1.

Najczęstsze metody i ich typy

TypeScript zna typ zwracany każdej wbudowanej metody. Uważaj na te, które mogą nic nie zwrócić, bo w trybie strict musisz obsłużyć null albo undefined, zanim użyjesz wyniku.

MetodaZwracaPrzykład
includes, startsWith, endsWithboolean"abc".includes("b") to true
indexOf, lastIndexOfnumber (-1, jeśli brak)"abc".indexOf("c") to 2
slice, substringstring"hello".slice(1, 3) to "el"
splitstring[]"a,b".split(",") to ["a", "b"]
trim, trimStart, trimEndstring" x ".trim() to "x"
toUpperCase, toLowerCasestring"Ts".toUpperCase() to "TS"
padStart, padEndstring"7".padStart(3, "0") to "007"
replace, replaceAllstring"a-b-c".replaceAll("-", "") to "abc"
repeatstring"ab".repeat(2) to "abab"
atstring | undefined"abc".at(-1) to "c"
matchRegExpMatchArray | null"a1".match(/\d/)
length (właściwość)number"abc".length to 3

Zwykłe indeksowanie, s[5], ma typ string, nawet gdy indeks wychodzi poza koniec (a w czasie wykonania wartość to wtedy undefined). Opcja kompilatora noUncheckedIndexedAccess zmienia ten typ na string | undefined.

Stringi są niemutowalne

Nie da się zmienić znaku w miejscu. TypeScript zgłasza przypisanie do indeksu jako błąd TS2542, Index signature in type 'String' only permits reading., a w JavaScripcie w trybie strict, do którego kod jest kompilowany, to samo przypisanie rzuciłoby TypeError w czasie wykonania. Każda metoda, która pozornie zmienia string, zwraca nowy.

Jak zamieniać inne wartości na stringi albo stringi na liczby, przeczytasz w string na number.

Typy literałów stringowych

string przyjmuje dowolny tekst. Typ literału stringowego przyjmuje jedną konkretną wartość, a unia takich typów tworzy przypominający enum zbiór dozwolonych stringów:

Typy literałów są sprawdzane tylko w czasie kompilacji: w czasie wykonania label("deleted") i tak by się wykonało i wypisało Post is deleted, co robi tutaj druga linia. Składnia template literal działa też na poziomie typów, jak w type EventName = `on${string}`, co przyjmuje każdy string zaczynający się od on.

Najczęściej zadawane pytania

Jak zrobić interpolację stringów w TypeScript?

Użyj template literal: backticków z placeholderami ${expression}, jak w `Hello, ${name}!`. W nawiasach klamrowych działa każde wyrażenie, a wynik ma typ string. Apostrofy i cudzysłowy nie interpolują.

Jak napisać string wielolinijkowy w TypeScript?

Umieść tekst w backtickach i łam linie w kodzie źródłowym: template literal zachowuje znaki nowej linii, a także wcięcie na początku każdej linii. Możesz też połączyć tablicę linii przez .join("\n") albo użyć \n w zwykłym stringu.

Jak sprawdzić, czy string zawiera podciąg w TypeScript?

Wywołaj text.includes("part"), które zwraca boolean. Rozróżnia wielkość liter, więc przy sprawdzaniu bez jej rozróżniania porównuj stringi po zamianie na małe litery: text.toLowerCase().includes(part.toLowerCase()). startsWith i endsWith sprawdzają początek i koniec, a indexOf zwraca pozycję albo -1.

Czy stringi w TypeScript różnią się od stringów w JavaScript?

Nie, w czasie wykonania to te same stringi JavaScriptu z tymi samymi metodami. TypeScript dodaje typ string, sprawdza, czy wywołujesz istniejące metody, i zna typy zwracane, na przykład to, że match może zwrócić null, a at może zwrócić undefined.

Czy można zmienić znak w stringu w TypeScript?

Nie. Stringi są niemutowalne, a s[0] = "H" to błąd kompilacji TS2542 (Index signature in type 'String' only permits reading). Zamiast tego zbuduj nowy string: "H" + s.slice(1).

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ