Menu

Stringhe in TypeScript: interpolazione, multiriga e contains

Lavorare con le stringhe in TypeScript: interpolazione con i template literal, stringhe su più righe, verificare se una stringa contiene una sottostringa, i metodi più comuni con i tipi che restituiscono e i tipi letterali stringa.

Questa pagina include editor eseguibili: modifica, esegui e vedi subito l'output.

Una stringa TypeScript è una stringa JavaScript con il tipo string. Per l'interpolazione, scrivi un template literal: backtick con segnaposto ${expression}. Apici singoli e doppi creano stringhe semplici senza interpolazione.

Tutti e tre gli stili di virgolette producono lo stesso tipo, string. Il primo $ in $${...} è un simbolo del dollaro letterale; solo ${ apre un segnaposto.

Interpolazione di stringhe

Dentro ${ } puoi mettere una variabile, un calcolo, una chiamata di funzione, un ternario o un template literal annidato. Il valore viene convertito in stringa come farebbe String(value) (l'eccezione è symbol: interpolarne uno è l'errore di compilazione TS2731, e in esecuzione lancerebbe un TypeError; scrivi String(sym)).

Interpolare un oggetto stampa [object Object], che non è quasi mai ciò che vuoi. Scegli i campi, oppure usa JSON.stringify(obj).

Stringhe su più righe

Un template literal può occupare più righe. I ritorni a capo vengono conservati, e anche l'indentazione all'inizio di ogni riga, perché tutto ciò che sta tra i backtick fa parte della stringa.

Quando l'indentazione del codice finirebbe dentro la stringa, costruiscila con un array e join("\n"), oppure allinea le righe del template literal all'inizio della riga.

Verificare se una stringa contiene una sottostringa

includes risponde a "la contiene?" con un boolean. startsWith ed endsWith controllano gli estremi. indexOf dà la posizione, o -1 quando la sottostringa manca. Tutti distinguono maiuscole e minuscole.

includes accetta anche una posizione di partenza: file.includes("R", 1) cerca solo a partire dall'indice 1.

Metodi comuni e i loro tipi

TypeScript conosce il tipo restituito da ogni metodo built-in. Quelli da tenere d'occhio sono quelli che possono tornare vuoti, perché con strict devi gestire null o undefined prima di usare il risultato.

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

L'indicizzazione semplice, s[5], ha tipo string anche quando l'indice va oltre la fine (dove in esecuzione il valore è undefined). L'opzione del compilatore noUncheckedIndexedAccess la rende invece string | undefined.

Le stringhe sono immutabili

Non puoi cambiare un carattere sul posto. TypeScript segnala l'assegnazione a un indice come errore TS2542, Index signature in type 'String' only permits reading., e nel JavaScript in modalità strict in cui compila, la stessa assegnazione lancerebbe un TypeError in esecuzione. Ogni metodo che sembra modificare una stringa ne restituisce una nuova.

Per trasformare altri valori in stringhe, o stringhe in numeri, vedi da stringa a numero.

Tipi letterali stringa

string accetta qualsiasi testo. Un tipo letterale stringa accetta un solo valore esatto, e una union di questi crea un insieme di stringhe ammesse simile a un enum:

I tipi letterali vengono controllati solo in compilazione; in esecuzione label("deleted") girerebbe comunque e stamperebbe Post is deleted, che è proprio ciò che fa qui la seconda riga. La sintassi dei template literal funziona anche a livello di tipi, come in type EventName = `on${string}`, che accetta qualsiasi stringa che inizia con on.

Domande frequenti

Come si fa l'interpolazione di stringhe in TypeScript?

Usa un template literal: backtick con segnaposto ${expression}, come in `Hello, ${name}!`. Dentro le graffe funziona qualsiasi espressione, e il risultato ha tipo string. Gli apici singoli e doppi non interpolano.

Come scrivo una stringa su più righe in TypeScript?

Metti il testo tra backtick e vai a capo nel sorgente: un template literal conserva i ritorni a capo e anche l'indentazione iniziale di ogni riga. In alternativa unisci un array di righe con .join("\n"), oppure usa \n dentro una stringa normale.

Come verifico se una stringa contiene una sottostringa in TypeScript?

Chiama text.includes("part"), che restituisce un boolean. Distingue maiuscole e minuscole, quindi per un controllo che le ignori confronta le stringhe in minuscolo: text.toLowerCase().includes(part.toLowerCase()). startsWith ed endsWith controllano gli estremi, e indexOf restituisce la posizione o -1.

C'è differenza tra le stringhe di TypeScript e quelle di JavaScript?

No, in esecuzione sono le stesse stringhe JavaScript con gli stessi metodi. TypeScript aggiunge il tipo string, controlla che tu chiami metodi esistenti e conosce i tipi restituiti, per esempio che match può restituire null e at può restituire undefined.

Si può cambiare un carattere di una stringa in TypeScript?

No. Le stringhe sono immutabili, e s[0] = "H" è l'errore di compilazione TS2542 (Index signature in type 'String' only permits reading). Costruisci invece una nuova stringa: "H" + s.slice(1).

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA