Génération de tsconfig.json : qu'y a-t-il sous le capot ?

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : Pourquoi tsconfig.json n'est-il pas qu'un simple fichier ?

\n\n

Quiconque a déjà écrit en TypeScript a rencontré le mystérieux fichier tsconfig.json. Si vous êtes débutant, vous l'avez probablement copié depuis la documentation ou cherché sur Google « comment générer tsconfig.json ». Et si vous êtes un développeur expérimenté, vous vous êtes peut-être déjà demandé : que se passe-t-il réellement sous le capot quand j'exécute tsc --init ?

\n\n

Dans cet article, nous ne donnerons pas seulement une recette toute prête, mais nous plongerons dans la salle des machines du compilateur TypeScript. Vous découvrirez comment le compilateur lit la configuration, quels flags sont responsables de la rigueur du code, et comment écrire votre propre « générateur » minimal de tsconfig.json à la volée. C'est parti !

\n\n

1. Qu'est-ce que tsconfig.json et à quoi sert-il ?

\n\n

tsconfig.json est un fichier JSON qui indique au compilateur TypeScript (tsc) comment traiter votre code. Sans lui, tsc fonctionnera en mode « par défaut », mais cela est souvent insuffisant pour des projets sérieux.

\n\n

Sous le capot, tsconfig.json définit :

\n
    \n
  • Quels fichiers compiler (clés include, exclude, files).
  • \n
  • Où placer le résultat (clé outDir).
  • \n
  • Quelles versions de JavaScript prendre en charge (clé target).
  • \n
  • Comment vérifier strictement les types (clés strict, noImplicitAny, etc.).
  • \n
  • Des modules et chemins supplémentaires.
  • \n
\n\n

Lorsque vous vous demandez « how can I generate a tsconfig.json file », la réponse est généralement une seule : tsc --init. Mais voyons ce que cette commande génère exactement.

\n\n

2. La commande tsc --init : qu'y a-t-il sous le capot ?

\n\n

Exécutez dans le terminal :

\n
npx tsc --init
\n\n

Un fichier tsconfig.json apparaîtra à la racine du projet avec de nombreux paramètres commentés. En réalité, sous le capot, le compilateur TypeScript exécute l'algorithme suivant :

\n\n
    \n
  1. Il vérifie si tsconfig.json existe déjà dans le répertoire courant.
  2. \n
  3. Si ce n'est pas le cas, il crée un modèle avec les paramètres par défaut.
  4. \n
  5. Il définit target: "es2016", module: "commonjs", strict: true et d'autres valeurs raisonnables.
  6. \n
  7. Toutes les autres options sont commentées afin que le développeur puisse les décommenter si nécessaire.
  8. \n
\n\n

Mais que faire si vous souhaitez personnaliser la génération ? Par exemple, activer immédiatement le mode strict ou définir un chemin pour les fichiers de sortie ? Pour cela, vous pouvez écrire votre propre script.

\n\n

2.1. Exemple : votre propre générateur de tsconfig.json en TypeScript

\n\n

Imaginez que vous écrivez un outil pour configurer automatiquement des projets. Voici à quoi pourrait ressembler une fonction qui génère tsconfig.json sous le capot :

\n\n
import * as fs from 'fs';\nimport * as path from 'path';\n\ninterface TsConfig {\n  compilerOptions: {\n    target: string;\n    module: string;\n    strict: boolean;\n    outDir: string;\n    rootDir: string;\n    esModuleInterop: boolean;\n    skipLibCheck: boolean;\n    forceConsistentCasingInFileNames: boolean;\n  };\n  include: string[];\n  exclude: string[];\n}\n\nfunction generateTsConfig(\n  target: string = 'ES2020',\n  outDir: string = './dist',\n  rootDir: string = './src',\n  strict: boolean = true\n): TsConfig {\n  return {\n    compilerOptions: {\n      target,\n      module: 'commonjs',\n      strict,\n      outDir,\n      rootDir,\n      esModuleInterop: true,\n      skipLibCheck: true,\n      forceConsistentCasingInFileNames: true,\n    },\n    include: ['src/**/*'],\n    exclude: ['node_modules', 'dist'],\n  };\n}\n\n// Générer et sauvegarder\nconst config = generateTsConfig();\nfs.writeFileSync(\n  path.join(process.cwd(), 'tsconfig.json'),\n  JSON.stringify(config, null, 2)\n);\nconsole.log('tsconfig.json créé !');\n

Blogs

Book Recommendations