Quelle est la configuration recommandée pour TypeScript si je veux utiliser les sources compilées avec le noeud 8?
la plupart des tutoriels utilisent les méthodes suivantes tsconig.json :
{
"compilerOptions": {
"target": "es6",
"module": "commonjs"
}
}
Mais maintenant, j'ai compris que toutes les fonctionnalités disponibles ne sont pas supportées. Par exemple, ['foo'].includes('bar')
renvoie l'erreur: La propriété 'includes' n'existe pas pour le type 'chaîne []'.
J'ai trouvé un problème qui résout ce problème. La solution consiste à utiliser la lib es7
. Je pourrais écraser les bibliothèques par défaut: "lib": ["es7"]
Mais je ne suis pas sûr qu'il s'agisse de la meilleure configuration pour le noeud 8 - existe-t-il d'autres fonctionnalités qui ne sont pas prises en charge par cette bibliothèque? y a-t-il trop de fonctionnalités définies?
Ma question est donc la suivante: quelles sont les meilleures configurations pour target
, lib
et module
si je veux utiliser le noeud 8?
À partir de Node.js 8.10.0
, 100% de ES2017 est pris en charge. Si vous savez que vous ciblez cette version ou une version plus récente, la configuration optimale devrait ressembler à ceci:
"module": "commonjs"
Node.js est sur le point d'ajouter des modules ES, mais pour le moment, nous devons nous en tenir à CommonJS.
"target": "es2017"
Cela indique à TypeScript qu'il est correct de générer du JavaScript syntaxe avec les fonctionnalités de ES2017. En pratique, cela signifie par exemple sortie async
/await
au lieu d’incorporer un polyfill (__awaiter
).
"lib": ["es2017"]
Cela indique à TypeScript qu'il est correct d'utiliser fonctions et propriétés introduit dans ES2017 ou une version antérieure. En pratique, cela signifie que vous pouvez utiliser par exemple Array.prototype.includes
et String.prototype.padStart
.
La configuration complète serait donc:
{
"compilerOptions": {
"lib": ["es2017"],
"module": "commonjs",
"target": "es2017"
}
}
Je suis sûr que vous avez déjà trouvé cela, mais le modèle de départ de Microsoft est ici: https://github.com/Microsoft/TypeScript-Node-Starter
Tant que vous êtes toujours sur Node 8.x, conservez votre module
sur commonjs
, target
peut être es6
.
compilerOptions.lib
définit uniquement les déclarations que le compilateur utilise pour les contrôles de compilation, cela n’affecte pas la sortie de tsc
. En d’autres termes, vous pouvez utiliser ce que vous voulez lib
et ne vous inquiétez pas du fait que votre code transpilé sera différent (ceci est entièrement contrôlé par compilerOptions.target
).
En utilisant es7
comme lib
dans votre cas ira bien et vous donnera des déclarations de type pour ES7 et moins.
Array.includes
est ES7 (ES2016) et, comme vous l'avez découvert, ne fait pas partie de ES6
. Vous pouvez définir votre lib
comme; lib: ["es6", "ES2016.Array.Include"]
pour contourner votre problème.