Le fichier tsconfig.json
Dans notre introduction, nous avons compilé le fichier demo.ts
en utilisant la CLI (commande tsc
) :
Dans notre introduction, nous avons compilé le fichier demo.ts
en utilisant la CLI (commande tsc
) :
tsc ./src/demo.ts --outFile ./dist/demo.js
Il existe de nombreuses options pour cette CLI, ce n'est donc pas très pratique de devoir tout configurer en une seule ligne de commande...
Heureusement, TypeScript a prévu le coup et permet d'utiliser un fichier de configuration : tsconfig.json
.
Créez le fichier tsconfig.json
à la racine de votre projet.
Puis entrez le contenu suivant :
{
"compilerOptions": {
"outDir": "dist",
"target": "es6",
"module": "esnext",
"removeComments": true,
"noEmitOnError": true,
"strict": true
},
"include": [
"src/**/*"
],
"exclude": [
"node_modules"
]
}
Vous allez maintenant pouvoir compiler très simplement en utilisant la commande tsc
:
tsc
# ps: assurez-vous d'être placé dans le dossier contenant le fichier tsconfig.json
C'est également possible de compiler automatiquement dès qu'il y a des changements enregistrés dans vos fichiers .ts
avec le flag --watch
:
tsc --watch
Cette config va permettre de compiler tous les fichiers .ts
contenus dans le dossier src
vers le dossier dist
, elle est relativement simple, j'y ai mis quelques options basiques :
Vous pouvez retrouver toutes les options de configuration et leur signification détaillée dans la documentation officielle :
https://www.typescriptlang.org/tsconfig
https://www.typescriptlang.org/docs/handbook/compiler-options.html
Target sert à définir la version ECMAScript des fichiers .js
compilés, cela n'influence pas la version ECMAScript de vos fichiers sources .ts
Admettons que vous ayez le code suivant dans votre fichier source exemple.ts
:
// @filename: exemple.ts (source)
let greeting = () => {
console.log('Hello world!')
};
Avec une target à es3, le fichier compilé exemple.js
contiendra ceci :
// @filename: exemple.js
var greeting = function () {
console.log('Hello world!');
};
Et si on utilise une target plus moderne comme es6, le fichier compilé exemple.js
donnera ceci :
// @filename: exemple.js
let greeting = () => {
console.log('Hello world!');
};
Module va permettre de spécifier le système d'import utilisé dans les fichiers compilés .js
.
/!\ cette option ne va pas influencer la version ECMAScript des fichiers .js
compilés, c'est le rôle de target.
ça peut porter à confusion au début mais en réalité c'est assez facile à comprendre.
Imaginons que vous ayez le fichier source (TypeScript) suivant :
// @filename: exemple.ts (source)
import {addNumbers} from "./utils";
let res = addNumbers(10, 5);
console.log(res);
Avec module = CommonJs, vous allez obtenir :
// @filename: exemple.js
"use strict";
exports.__esModule = true;
var utils_1 = require("./utils");
var res = (0, utils_1.addNumbers)(10, 5);
console.log(res);
Avec module = esnext :
// @filename: exemple.js
import { addNumbers } from "./utils";
let res = addNumbers(10, 5);
console.log(res);
La target et le module à utiliser varient en fonction de la modernité des navigateurs que vous ciblez, pour cela vous connaissez sûrement le site caniuse.com :
Pour en savoir plus sur les options target et module :
C'est la dernière chose importante à savoir concernant le fichier tsconfig.json, pour le reste, vous l'apprendrez sur le tas.
Activer le mode strict (true) va indiquer à TypeScript d'effectuer des vérifications supplémentaires (type checking) ce qui va renforcer la fiabilité de votre application JS, mais en contrepartie vous devrez être plus rigoureux dans votre manière de coder au sein de vos fichiers TypeScript (.ts).
const getArrayLength = (arg) => {
console.log(arg.length);
};
getArrayLength([1,2,3]);
L'exemple ci-dessus va déclencher une erreur si vous activez le mode strict :
tsc src/demo.ts:1:25 - error TS7006: Parameter 'arg' implicitly has an 'any' type.
1 const getArrayLength = (arg) => {
Found 1 error in src/demo.ts:1
Le mode strict active de nombreuses options dont noImplicitAny ce qui explique le message d'erreur : interdiction de faire du typage implicite sur une donnée où TypeScript ne pourra deviner le type (= fallback en any non autorisé).
const getArrayLength = (arg: number[]) => {
console.log(arg.length);
};
getArrayLength([1,2,3]);
Ici nous avons ajouté le type number[] à l'argument arg de la fonction getArrayLength :
TypeScript sait désormais que arg est un tableau de nombres et ne déclenche plus l'erreur !
plus d'infos sur le mode strict : https://www.typescriptlang.org/tsconfig#strict
Vous savez maintenant configurer un fichier tsconfig.json basique et comprenez les options les plus importantes, nous allons pouvoir passer à la suite et continuer l'apprentissage des concepts du langage TypeScript.