Un string de TypeScript es un string de JavaScript con el tipo string. Para interpolar, escribe un template literal: backticks con marcadores ${expression}. Las comillas simples y dobles crean strings normales sin interpolación.
Los tres estilos de comillas producen el mismo tipo, string. El primer $ de $${...} es un signo de dólar literal; solo ${ abre un marcador.
Interpolación de strings
Dentro de ${ } puedes poner una variable, una operación aritmética, una llamada a función, un ternario o un template literal anidado. El valor se convierte a string igual que lo haría String(value) (la excepción es symbol: interpolar uno es el error de compilación TS2731, y en tiempo de ejecución lanzaría un TypeError; escribe String(sym)).
Interpolar un objeto imprime [object Object], que casi nunca es lo que quieres. Elige los campos o usa JSON.stringify(obj).
Strings multilínea
Un template literal puede ocupar varias líneas. Se conservan los saltos de línea y también la sangría al inicio de cada línea, porque todo lo que hay entre los backticks forma parte del string.
Cuando la sangría de tu código se colaría en el string, constrúyelo con un array y join("\n"), o pega las líneas del template literal al inicio de la línea.
Comprobar si un string contiene un substring
includes responde «¿lo contiene?» con un boolean. startsWith y endsWith comprueban los extremos. indexOf da la posición, o -1 cuando el substring no está. Todos distinguen mayúsculas y minúsculas.
includes también acepta una posición inicial: file.includes("R", 1) solo busca a partir del índice 1.
Métodos habituales y sus tipos
TypeScript conoce el tipo de retorno de cada método integrado. Los que pueden volver vacíos son los que hay que vigilar, porque con strict debes manejar null o undefined antes de usar el resultado.
| Método | Devuelve | Ejemplo |
|---|---|---|
includes, startsWith, endsWith | boolean | "abc".includes("b") es true |
indexOf, lastIndexOf | number (-1 si no está) | "abc".indexOf("c") es 2 |
slice, substring | string | "hello".slice(1, 3) es "el" |
split | string[] | "a,b".split(",") es ["a", "b"] |
trim, trimStart, trimEnd | string | " x ".trim() es "x" |
toUpperCase, toLowerCase | string | "Ts".toUpperCase() es "TS" |
padStart, padEnd | string | "7".padStart(3, "0") es "007" |
replace, replaceAll | string | "a-b-c".replaceAll("-", "") es "abc" |
repeat | string | "ab".repeat(2) es "abab" |
at | string | undefined | "abc".at(-1) es "c" |
match | RegExpMatchArray | null | "a1".match(/\d/) |
length (propiedad) | number | "abc".length es 3 |
La indexación simple, s[5], tiene tipo string incluso cuando el índice está fuera del final (donde el valor en tiempo de ejecución es undefined). La opción del compilador noUncheckedIndexedAccess hace que sea string | undefined.
Los strings son inmutables
No puedes cambiar un carácter en su sitio. TypeScript informa de la asignación a un índice como el error TS2542, Index signature in type 'String' only permits reading., y en el JavaScript en modo estricto al que compila, esa misma asignación lanzaría un TypeError en tiempo de ejecución. Todos los métodos que parecen modificar un string devuelven uno nuevo.
Para convertir otros valores en strings, o strings en números, consulta string a número.
Tipos literales de string
string acepta cualquier texto. Un tipo literal de string acepta un único valor exacto, y una unión de ellos forma un conjunto de strings permitidos parecido a un enum:
Los tipos literales solo se comprueban en tiempo de compilación; en tiempo de ejecución label("deleted") se ejecutaría igualmente e imprimiría Post is deleted, que es lo que hace aquí la segunda línea. La sintaxis de template literal también funciona a nivel de tipos, como en type EventName = `on${string}`, que acepta cualquier string que empiece por on.
Preguntas frecuentes
¿Cómo se interpola un string en TypeScript?
Usa un template literal: backticks con marcadores ${expression}, como en `Hello, ${name}!`. Dentro de las llaves funciona cualquier expresión, y el resultado es de tipo string. Las comillas simples y dobles no interpolan.
¿Cómo escribo un string multilínea en TypeScript?
Pon el texto entre backticks y separa las líneas en el código fuente: un template literal conserva los saltos de línea y también la sangría inicial de cada línea. Otra opción es unir un array de líneas con .join("\n"), o usar \n dentro de un string normal.
¿Cómo compruebo si un string contiene un substring en TypeScript?
Llama a text.includes("part"), que devuelve un boolean. Distingue mayúsculas y minúsculas, así que para no distinguirlas compara los strings en minúsculas: text.toLowerCase().includes(part.toLowerCase()). startsWith y endsWith comprueban los extremos, e indexOf devuelve la posición o -1.
¿Hay diferencia entre los strings de TypeScript y los de JavaScript?
No, en tiempo de ejecución son los mismos strings de JavaScript con los mismos métodos. TypeScript añade el tipo string, comprueba que llamas a métodos que existen y conoce los tipos de retorno, por ejemplo que match puede devolver null y at puede devolver undefined.
¿Se puede cambiar un carácter de un string en TypeScript?
No. Los strings son inmutables, y s[0] = "H" es el error de compilación TS2542 (Index signature in type 'String' only permits reading). Construye un string nuevo: "H" + s.slice(1).