Types primitifs et annotations
Comprendre le système de types de TypeScript, annoter des variables et des fonctions, et laisser l'inférence travailler pour vous.
TypeScript est un sur-ensemble de JavaScript : tout code JavaScript valide est aussi du TypeScript valide. La différence fondamentale est l'ajout d'un système de types statiques. Cela signifie que les erreurs de type sont détectées au moment de la compilation (avant l'exécution), et non au moment de l'exécution (quand il est trop tard). Les types primitifs fondamentaux sont : string (texte), number (entiers et décimaux), boolean (true ou false), null, undefined, et void (absence de valeur de retour). Pour annoter une variable, on ajoute : type après son nom : let age: number = 25. Si vous tentez ensuite d'écrire age = "vingt-cinq", TypeScript signale l'erreur immédiatement dans votre éditeur.
L'inférence de type est l'une des fonctionnalités les plus pratiques de TypeScript : le compilateur déduit automatiquement le type d'une variable à partir de sa valeur initiale. Quand vous écrivez let message = "Bonjour", TypeScript sait que message est de type string sans que vous ayez besoin de l'écrire. En pratique, vous n'annotez explicitement que lorsque l'inférence ne suffit pas : paramètres de fonctions, valeurs de retour complexes, ou variables déclarées sans valeur initiale. Cette approche vous donne la sécurité du typage sans la lourdeur d'annoter chaque ligne.
Les fonctions en TypeScript se typent en annotant leurs paramètres et leur valeur de retour. Par exemple : function calculerTTC(prixHT: number, taux: number): number indique clairement que la fonction prend deux nombres et retourne un nombre. Les fonctions fléchées suivent la même logique : const doubler = (n: number): number => n * 2. TypeScript supporte aussi les paramètres optionnels avec ? (function saluer(nom: string, titre?: string)) et les valeurs par défaut (function saluer(nom: string, titre: string = "M.")). Le type void indique qu'une fonction ne retourne rien, tandis que never indique une fonction qui ne termine jamais (comme une fonction qui lance toujours une erreur).
function calculerPrix(
prixHT: number,
taux: number = 0.20,
remise?: number
): number {
let total = prixHT * (1 + taux);
if (remise) {
total -= total * remise;
}
return Math.round(total * 100) / 100;
}
const prix1 = calculerPrix(100); // 120
const prix2 = calculerPrix(100, 0.10); // 110
const prix3 = calculerPrix(100, 0.20, 0.15); // 102Exercice pratique
Convertisseur de température typé
Créez deux fonctions typées : celsiusVsFahrenheit(c) qui convertit des Celsius en Fahrenheit, et fahrenheitVersCelsius(f) qui fait l'inverse. Les deux fonctions prennent un number et retournent un number.
- Déclarez celsiusVersFahrenheit avec le paramètre c: number et le retour : number.
- Implémentez la formule : (c * 9/5) + 32.
- Déclarez fahrenheitVersCelsius avec le paramètre f: number et le retour : number.
- Implémentez la formule : (f - 32) * 5/9. Testez avec des valeurs connues (0°C = 32°F, 100°C = 212°F).
✓Les deux fonctions sont correctement typées et retournent les bonnes valeurs. 0°C → 32°F et 212°F → 100°C.