Paramètres de typeScript tsconfig pour Node.js 12?


13

Quels sont les tsconfigparamètres TypeScript optimaux pour la sortie du code qui va être exécuté sur Node.js 12?

Réponses:


45

Depuis Node.js 12.0.0, 100% de ES2019 est pris en charge. Si vous savez que vous ciblez cette version ou une version plus récente, la configuration optimale ressemblerait à ceci:

  • "module": "commonjs"

    Node.js est sur le point d'ajouter des modules ES, mais pour l'instant nous devrons nous en tenir à CommonJS.

  • "target": "es2019"

    Cela indique à TypeScript que la sortie de la syntaxe JavaScript avec les fonctionnalités d'ES2019 est acceptable. En pratique, cela signifie, par exemple, qu'il restituera les propriétés rest / spread de l'objet et la syntaxe asynchrone / wait au lieu d'incorporer un polyfill.

  • "lib": ["es2019", "es2020.bigint", "es2020.string", "es2020.symbol.wellknown"]

    Cela indique à TypeScript qu'il est acceptable d'utiliser les fonctions et les propriétés introduites dans ES2019 ou version antérieure. En pratique, cela signifie que vous pouvez utiliser par exemple String.prototype.trimStartet Array.prototype.flat.

    En plus d'ES2019, Node.js 12 prend également en charge BigInt& à matchAllpartir d'ES2020, c'est pourquoi nous incluons les définitions supplémentaires d'ES2020.

La configuration complète serait donc:

{
  "compilerOptions": {
    "lib": ["es2019", "es2020.bigint", "es2020.string", "es2020.symbol.wellknown"],
    "module": "commonjs",
    "target": "es2019"
  }
}

Si vous ciblez Node.js 12.9.0ou plus récent , vous pouvez simplement spécifier "lib": ["es2020"]que cette version prend en charge toutes les nouvelles fonctions et propriétés introduites dans ES2020. Cependant, il ne prend pas en charge la nouvelle syntaxe JavaScript , vous devez donc rester "target": "es2019".

La configuration complète serait donc:

{
  "compilerOptions": {
    "lib": ["es2020"],
    "module": "commonjs",
    "target": "es2019"
  }
}

Si vous exécutez Node.js 14, vous pouvez voir ma réponse similaire pour Node.js 14 ici

Si vous exécutez Node.js 10, vous pouvez voir ma réponse similaire pour Node.js 10 ici

Si vous exécutez Node.js 8, vous pouvez voir ma réponse similaire pour Node.js 8 ici


Cela "target"affecte- t-il "lib"de quelque façon que ce "lib"soit s'il est laissé vide dans la configuration? Si j'ai juste à "target": "es2020"quoi sert "lib"par défaut? Cela a toujours été une source de mystère pour moi.
Sumomo

@Sumomo cette réponse ( stackoverflow.com/a/50987516/148072 ) fournit un petit aperçu. Bien que je n'ai pas trouvé plus d'informations sur ce qui est plus récent que "ES6" pour la bibliothèque par défaut ...
Linus Unnebäck

1
Il y a également maintenant es2020.promise qui est pris en charge à partir du nœud 12.10.0.
Ivan Yarych

1
@IvanYarych la partie inférieure de ma réponse a une section pour Node.js> = 12.9.0 qui inclut es2020 qui à son tour inclut es2020.promise
Linus Unnebäck
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.