Menu

String en TypeScript : interpolation, multiligne et contains

Manipuler les chaînes en TypeScript : interpolation avec les template literals, chaînes multilignes, vérifier si une chaîne contient une sous-chaîne, les méthodes courantes et les types qu'elles renvoient, et les types littéraux de chaîne.

Cette page contient des éditeurs exécutables - modifiez, exécutez et voyez la sortie instantanément.

Une chaîne TypeScript est une chaîne JavaScript de type string. Pour l'interpolation, écrivez un template literal : des backticks avec des emplacements ${expression}. Les guillemets simples et doubles créent des chaînes simples, sans interpolation.

Les trois styles de guillemets produisent le même type, string. Le premier $ de $${...} est un signe dollar littéral ; seul ${ ouvre un emplacement.

L'interpolation de chaînes

Dans ${ }, vous pouvez placer une variable, un calcul, un appel de fonction, un ternaire ou un template literal imbriqué. La valeur est convertie en chaîne comme le ferait String(value) (le symbol fait exception : en interpoler un provoque l'erreur de compilation TS2731, et lèverait une TypeError à l'exécution ; écrivez String(sym)).

Interpoler un objet affiche [object Object], ce qui n'est presque jamais ce que vous voulez. Choisissez les champs, ou utilisez JSON.stringify(obj).

Les chaînes multilignes

Un template literal peut s'étendre sur plusieurs lignes. Les retours à la ligne sont conservés, tout comme l'indentation au début de chaque ligne, car tout ce qui se trouve entre les backticks fait partie de la chaîne.

Quand l'indentation de votre code risque de se retrouver dans la chaîne, construisez-la avec un tableau et join("\n"), ou collez les lignes du template literal au début de la ligne.

Vérifier si une chaîne contient une sous-chaîne

includes répond à « est-ce qu'elle contient » par un boolean. startsWith et endsWith vérifient les extrémités. indexOf donne la position, ou -1 quand la sous-chaîne est absente. Toutes ces méthodes sont sensibles à la casse.

includes accepte aussi une position de départ : file.includes("R", 1) ne cherche qu'à partir de l'indice 1.

Les méthodes courantes et leurs types

TypeScript connaît le type de retour de chaque méthode intégrée. Celles qui peuvent revenir vides sont à surveiller, car avec strict vous devez traiter null ou undefined avant d'utiliser le résultat.

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

L'accès simple par indice, s[5], est de type string même quand l'indice dépasse la fin (où la valeur vaut undefined à l'exécution). L'option de compilation noUncheckedIndexedAccess le transforme en string | undefined.

Les chaînes sont immuables

Vous ne pouvez pas modifier un caractère sur place. TypeScript signale l'assignation à un indice par l'erreur TS2542, Index signature in type 'String' only permits reading., et dans le JavaScript en mode strict produit par la compilation, la même assignation lèverait une TypeError à l'exécution. Chaque méthode qui semble modifier une chaîne en renvoie une nouvelle.

Pour convertir d'autres valeurs en chaînes, ou des chaînes en nombres, voir convertir une chaîne en nombre.

Les types littéraux de chaîne

string accepte n'importe quel texte. Un type littéral de chaîne accepte une seule valeur exacte, et une union de ces types forme un ensemble de chaînes autorisées, à la manière d'un enum :

Les types littéraux ne sont vérifiés qu'à la compilation ; à l'exécution, label("deleted") s'exécuterait quand même et afficherait Post is deleted, ce que fait ici la deuxième ligne. La syntaxe des template literals fonctionne aussi au niveau des types, comme dans type EventName = `on${string}`, qui accepte toute chaîne commençant par on.

Questions fréquentes

Comment faire de l'interpolation de chaîne en TypeScript ?

Utilisez un template literal : des backticks avec des emplacements ${expression}, comme dans `Hello, ${name}!`. N'importe quelle expression fonctionne entre les accolades, et le résultat est de type string. Les guillemets simples et doubles n'interpolent pas.

Comment écrire une chaîne multiligne en TypeScript ?

Placez le texte entre backticks et coupez les lignes dans le code source : un template literal conserve les retours à la ligne, ainsi que l'indentation au début de chaque ligne. Vous pouvez aussi joindre un tableau de lignes avec .join("\n"), ou utiliser \n dans une chaîne ordinaire.

Comment vérifier si une chaîne contient une sous-chaîne en TypeScript ?

Appelez text.includes("part"), qui renvoie un boolean. La méthode est sensible à la casse ; pour une vérification insensible à la casse, comparez des chaînes en minuscules : text.toLowerCase().includes(part.toLowerCase()). startsWith et endsWith vérifient les extrémités, et indexOf renvoie la position ou -1.

Les chaînes de TypeScript diffèrent-elles de celles de JavaScript ?

Non, à l'exécution ce sont les mêmes chaînes JavaScript avec les mêmes méthodes. TypeScript ajoute le type string, vérifie que vous appelez des méthodes qui existent, et connaît les types de retour, par exemple que match peut renvoyer null et at peut renvoyer undefined.

Peut-on modifier un caractère d'une chaîne en TypeScript ?

Non. Les chaînes sont immuables, et s[0] = "H" provoque l'erreur de compilation TS2542 (Index signature in type 'String' only permits reading). Construisez plutôt une nouvelle chaîne : "H" + s.slice(1).

Coddy programming languages illustration

Apprendre à coder avec Coddy

COMMENCER