TypeScript et tsconfig.json
Cet article explique TypeScript et tsconfig.json.
En partant du rôle fondamental de TypeScript, nous expliquerons, à l’aide d’exemples concrets, comment tsconfig.json fonctionne au sein d’un projet.
YouTube Video
TypeScript et tsconfig.json
TypeScript est du « JavaScript avec des types ». Cependant, pour utiliser TypeScript efficacement dans des projets concrets, il est essentiel de bien comprendre et configurer intentionnellement tsconfig.json.
Pourquoi avons-nous besoin de TypeScript ?
Premièrement, la principale raison d’utiliser TypeScript est « la capacité de détecter les erreurs avant l’exécution ».
1function add(a: number, b: number): number {
2 return a + b;
3}
4
5add(1, "2");Ce code ne provoquerait pas d’erreur en JavaScript avant l’exécution, mais en TypeScript cela entraînerait une erreur de type à la compilation.
Cette « détection précoce » améliore considérablement l’efficacité et la qualité du développement.
Comment TypeScript est-il exécuté ?
En principe, TypeScript ne peut pas être exécuté tel quel. Vous devez le convertir en JavaScript à l’aide de tsc (le compilateur TypeScript)..
1npm install -D typescript
2npx tsc --init- En effectuant cette opération,
tsconfig.jsonest généré, fournissant le fichier central qui définit le comportement du projet TypeScript.
Quel est le rôle de tsconfig.json ?
tsconfig.json est un fichier de configuration qui détermine « quels fichiers », « avec quelles règles » et « comment les convertir ». Bien qu’il puisse sembler complexe au premier abord, seuls quelques paramètres sont vraiment importants.
1{
2 "compilerOptions": {
3 "target": "ES2020",
4 "module": "ESNext",
5 "strict": true
6 }
7}- Avec seulement ces paramètres, un développement TypeScript moderne et sûr est possible.
target : La version de JavaScript à générer
target détermine le niveau de spécification du JavaScript généré.
1"target": "ES2020"Avec cela, TypeScript produira du JavaScript équivalent à ES2020. Pour les environnements plus anciens, choisissez ES5 ; pour les environnements les plus récents, sélectionnez ES2022, etc.
Lorsque vous spécifiez ESNext
1"target": "ESNext"-
ESNextindique de générer la dernière syntaxe JavaScript disponible telle quelle. TypeScript ne transpile pas la syntaxe et laisse ce soin à l’environnement d’exécution comme Node.js ou les navigateurs. -
Par conséquent,
ESNextconvient lorsque vous ciblez uniquement la dernière version de Node.js ou lorsque vous utilisez Babel ou un bundler pour transpiler séparément. En revanche, si l’environnement d’exécution ne prend pas en charge la dernière syntaxe, cela peut entraîner des erreurs à l’exécution, donc la prudence est de mise.
module : Spécifier le format de module
module spécifie le format de module.
1"module": "ESNext"ESNextest la norme dans les environnements frontend et Node.js modernes.- Choisissez
"CommonJS"uniquement si vous avez besoin de CommonJS.
strict : Maximiser la sécurité des types
strict est un interrupteur pour maximiser la sécurité de TypeScript.
1"strict": true- L’activer permettra de détecter entièrement les types ambigus et les bugs potentiels.
mode strict et « any » implicite
Lorsque vous activez strict, TypeScript considère comme une erreur les variables dont il ne peut pas déduire le type.
1function printValue(value) {
2 console.log(value);
3}- Cette variable
valuen’a pas d’information de type à la déclaration, donc TypeScript ne peut pas déterminer son type. En conséquence,anyest utilisé implicitement, ce qui déclenchera un avertissement (erreur) en modestrict.
1function printValue(value: number) {
2 console.log(value);
3}- En spécifiant explicitement le type comme ceci, TypeScript comprend que « cette variable ne gère que des nombres ». En TypeScript, il est plus important que le type puisse être déterminé de manière unique que de pouvoir omettre le type.
include/exclude : Contrôler les fichiers à compiler
Dans tsconfig.json, vous pouvez spécifier les fichiers à inclure et ceux à exclure de la compilation.
1{
2 "include": ["src"],
3 "exclude": ["node_modules"]
4}- Ainsi, seuls les fichiers sous
srcseront gérés par TypeScript. node_modulesspécifié dansexcludesera exclu de la compilation même s’il se trouve sous un chemin inclus parinclude.
outDir : Spécifier le dossier de sortie
Spécifiez outDir pour gérer l’emplacement de vos fichiers compilés.
1"outDir": "dist"- Ainsi, tous les résultats compilés seront placés dans le dossier
dist. En pratique, séparer le code source des artefacts de build est la norme.
rootDir : Spécifier le dossier source
rootDir spécifie le dossier que TypeScript considère comme la racine du code source.
1"rootDir": "src"-
Ce paramètre permet à TypeScript de conserver la structure des dossiers à partir de
srclors de la génération des fichiers. Par exemple,src/index.tssera généré sousdist/index.js. -
La structure du dossier spécifié dans
rootDirsera reproduite dansoutDir.
esModuleInterop : Faire le lien entre CommonJS et les modules ES
Voyons maintenant esModuleInterop.
1"esModuleInterop": true- Si cette option est activée, vous pouvez utiliser les modules CommonJS avec la syntaxe
importen toute sécurité.
1import fs from "fs";- Ce paramètre est presque indispensable lors de l’utilisation de Node.js.
noImplicitAny : Interdire les types « any » implicites
Il est également important de renforcer les contrôles de types dans tsconfig.json.
1"noImplicitAny": true- Avec cela, vous pouvez interdire les types
anyimplicites. Cela vous permet de détecter de manière fiable les endroits où vous avez oublié de spécifier un type.
Configuration pour détecter le code inutilisé
Les paramètres de détection du code inutilisé permettent également d’améliorer la maintenabilité.
1"noUnusedLocals": true,
2"noUnusedParameters": true- Avec cela, les variables et arguments inutiles seront immédiatement signalés par des avertissements.
lib : Définir les API intégrées disponibles
lib est un paramètre qui spécifie les API standard que TypeScript présume être disponibles.
1"lib": ["ES2020", "DOM"]- Avec ce paramètre, les types suivants deviennent accessibles :.
Avec
ES2020, des fonctionnalités modernes commePromise,MapetSetdeviennent disponibles. AvecDOM, les API navigateur commedocument,windowetHTMLElementdeviennent disponibles.
En frontend, incluez DOM ; pour les projets uniquement Node.js, retirez DOM pour éviter l’inclusion de types globaux inutiles.
moduleResolution : Règles de résolution des modules
moduleResolution détermine comment les modules spécifiés dans les instructions import sont résolus.
1"moduleResolution": "Node"Les deux principales options sont les suivantes :.
- Si vous indiquez
Node, les règles de résolution des modules Node.js seront utilisées. Classicest l’ancienne méthode spécifique à TypeScript, mais elle est rarement utilisée de nos jours.
Dans les environnements utilisant Node.js ou un bundler, il est préférable de spécifier explicitement Node.
Un tsconfig.json minimal et prêt pour la production
Sur la base de ce que nous avons vu jusqu’à présent, un tsconfig.json minimal prêt pour la production ressemblerait à ceci :.
1{
2 "compilerOptions": {
3 "target": "ES2020",
4 "module": "ESNext",
5 "moduleResolution": "Node",
6 "lib": ["ES2020", "DOM"],
7 "strict": true,
8 "rootDir": "src",
9 "outDir": "dist",
10 "esModuleInterop": true,
11 "noImplicitAny": true,
12 "noUnusedLocals": true,
13 "noUnusedParameters": true
14 },
15 "include": ["src"]
16}Cette configuration fournit une base solide aussi bien pour les projets frontend que Node.js.
Résumé : tsconfig.json est un « livre de règles »
tsconfig.json n’est pas juste un fichier de configuration, mais un « livre de règles » qui s’applique à tout le projet. Avec tsconfig.json, des politiques importantes telles que les suivantes sont clairement définies :.
- Le niveau de sécurité des types.
- Les conventions de codage de votre équipe.
- La prévention des bugs futurs.
En comprenant tsconfig.json, vous serez en mesure non seulement d’écrire du TypeScript, mais aussi de concevoir vos projets pour un usage sûr de TypeScript.
Vous pouvez suivre l'article ci-dessus avec Visual Studio Code sur notre chaîne YouTube. Veuillez également consulter la chaîne YouTube.