Menu

Types TypeScript : string, number, boolean et les autres

Les types intégrés de TypeScript : string, number, boolean, bigint, symbol, null et undefined, plus un aperçu des tableaux et des objets. Comment écrire une annotation de type, pourquoi il n'existe pas de type entier, et pourquoi on écrit string plutôt que String.

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

Les types TypeScript décrivent le genre de valeur qu'une variable peut contenir. Vous écrivez un type après deux-points, let name: string, et le compilateur refuse tout code qui y place le mauvais genre de valeur. Les types de base sont les sept primitives de JavaScript, plus les types objet pour les tableaux et les objets.

Les annotations sont vérifiées à la compilation, puis retirées. Le programme qui s'exécute est du JavaScript ordinaire.

Les types primitifs

TypeExemples de valeursRemarques
string"hi", 'hi', `hi ${name}`Du texte. Les trois styles de guillemets ont le même type.
number42, 3.14, -0.5, NaN, InfinityTous les nombres, entiers ou non. Il n'y a ni int ni float.
booleantrue, falseUniquement ces deux valeurs.
bigint10n, BigInt(10)Des entiers de taille quelconque. Demande une cible ES2020 ou plus récente.
symbolSymbol("id")Une valeur unique, surtout utilisée comme clé d'objet.
nullnull« Vide volontairement ».
undefinedundefined« Non défini ». C'est aussi ce que donne la lecture d'une propriété absente.

Les noms de types sont en minuscules. À l'exécution, typeof renvoie les mêmes mots pour la plupart d'entre eux : typeof x === "number" est la façon de vérifier le type primitif d'une valeur pendant l'exécution du programme.

Les annotations de type

Une annotation, c'est : Type après une variable, un paramètre ou la liste de paramètres d'une fonction. C'est sur les paramètres que les annotations comptent le plus, car TypeScript ne peut pas deviner ce qu'un appelant va passer.

Quand une variable est initialisée sur la même ligne, l'annotation est en général superflue : let count = 10 a déjà le type number. Les règles pour omettre les types sont sur la page inférence de type.

Un mauvais type est une erreur de compilation

Assignez une valeur du mauvais type, et le compilateur s'arrête avant que quoi que ce soit ne s'exécute :

Le compilateur affiche :

index.ts(3,1): error TS2322: Type 'string' is not assignable to type 'number'.

La correction consiste à convertir la valeur, port = Number("3000"), ou à changer l'annotation si la variable doit vraiment contenir du texte.

number : il n'y a pas de type entier

JavaScript stocke chaque nombre sous forme de valeur à virgule flottante sur 64 bits, TypeScript n'a donc qu'un seul type number. Les entiers sont exacts jusqu'à Number.MAX_SAFE_INTEGER (2 ** 53 - 1). Au-delà, utilisez bigint.

bigint et number ne se mélangent pas : exact + 1 est une erreur de compilation (TS2365 : Operator '+' cannot be applied to types 'bigint' and '1'., où '1' est le type littéral du 1) et, s'il s'exécutait un jour, une TypeError à l'exécution aussi. Convertissez explicitement un des deux côtés avec BigInt(1) ou Number(exact), en sachant que Number arrondit les valeurs hors de la plage sûre.

Si vous voulez un type qui n'accepte que des nombres entiers, TypeScript ne sait pas l'exprimer pour des valeurs quelconques. Validez avec Number.isInteger à l'endroit où la valeur entre dans votre programme.

boolean

boolean a exactement deux valeurs, true et false. Les valeurs simplement truthy (1, "yes") ne sont pas des booléens : convertissez-les avec Boolean(x) ou x !== 0.

null et undefined

Avec strict activé (la valeur par défaut depuis TypeScript 6.0), null et undefined sont des types distincts et ne font partie ni de string, ni de number, ni d'aucun autre type. Une variable qui peut être vide l'indique avec une union :

Lire une propriété d'une valeur qui peut être undefined est une erreur de compilation tant que vous ne l'avez pas vérifiée. La page null et undefined présente les vérifications, ?. et ??.

Tableaux et objets en un coup d'œil

Tout ce qui n'est pas une primitive est un type objet. Les trois formes que vous rencontrez en premier :

let tags: string[] = ["ts", "js"];               // array of strings
let point: { x: number; y: number } = { x: 1, y: 2 }; // object with two number properties
let greet: (name: string) => string = (n) => `hi ${n}`; // function type

Chacune a sa propre page : tableaux, tuples (tableaux de longueur fixe), types objet et types de fonctions.

string, number, boolean ou String, Number, Boolean

Les noms avec majuscule sont les types des objets enveloppes de JavaScript (new String("x")), pas des valeurs ordinaires. Annotez avec les noms en minuscules.

index.ts(3,7): error TS2322: Type 'String' is not assignable to type 'string'.
  'string' is a primitive, but 'String' is a wrapper object. Prefer using 'string' when possible.

Remplacez String par string à la première ligne et le bloc s'exécute. Il en va de même pour Number, Boolean, Symbol et BigInt. (Object est un cas à part : il accepte presque n'importe quelle valeur, primitives comprises ; voir les types objet.)

Autres types intégrés

Quelques autres types apparaissent tôt. Chacun a sa propre page.

TypeSignification
anyDésactive la vérification pour cette valeur. À éviter.
unknownN'importe quelle valeur, mais vous devez la vérifier avant de l'utiliser.
voidUne fonction ne renvoie rien d'utile.
neverAucune valeur : une fonction qui lève toujours une exception, ou un cas impossible.
objectN'importe quelle valeur non primitive.
"red" | "green"Un type littéral : uniquement ces valeurs exactes.

Questions fréquentes

TypeScript a-t-il un type entier ?

Non. number couvre aussi bien les entiers que les décimaux, car JavaScript stocke chaque nombre sous forme de flottant 64 bits. Vérifiez qu'un nombre est entier à l'exécution avec Number.isInteger(n), et utilisez bigint (10n) quand vous avez besoin d'entiers plus grands que Number.MAX_SAFE_INTEGER (2 ** 53 - 1) sans perte de précision.

Quelle est la différence entre string et String en TypeScript ?

string est le type primitif, celui des littéraux de chaîne et des template strings. String est le type de l'objet enveloppe créé par new String("x"). Annotez toujours avec les minuscules string, number et boolean ; assigner un String à un string est une erreur de compilation (TS2322).

Quels sont les types primitifs en TypeScript ?

Les sept mêmes qu'en JavaScript : string, number, boolean, bigint, symbol, null et undefined. Tout le reste (tableaux, objets, fonctions, instances de classes) est un type objet.

Comment déclarer une variable avec un type en TypeScript ?

Placez deux-points et le type après le nom : let count: number = 0;. Pour une fonction, annotez chaque paramètre et, si vous le souhaitez, le type de retour : function add(a: number, b: number): number. Quand une variable est initialisée, vous pouvez en général omettre l'annotation et laisser TypeScript l'inférer.

Les types TypeScript existent-ils à l'exécution ?

Non. Le compilateur vérifie les types puis les retire, donc le JavaScript exécuté ne contient aucune annotation. À l'exécution, vous vérifiez les valeurs avec les opérateurs JavaScript comme typeof, Array.isArray et instanceof.

Coddy programming languages illustration

Apprendre à coder avec Coddy

COMMENCER