¿Cuál es la configuración óptima de tsconfig
de TypeScript para generar código que se ejecutará en Node.js 12?
A partir de Node.js 12.0.0
, se admite el 100 % de ES2019. Si sabe que su objetivo es esa versión o una más reciente, la configuración óptima se vería así:
"module": "commonjs"
Node.js está en camino de agregar ES-Modules, pero por ahora tendremos que quedarnos con CommonJS.
"target": "es2019"
Esto le dice a TypeScript que está bien generar sintaxis de JavaScript con funciones de ES2019. En la práctica, esto significa que, por ejemplo, generará las propiedades de descanso/difusión del objeto y la sintaxis asíncrona/espera en lugar de incrustar un polirrelleno.
"lib": ["es2019", "es2020.bigint", "es2020.string", "es2020.symbol.wellknown"]
Esto le dice a TypeScript que está bien usar funciones y propiedades introducidas en ES2019 o antes. En la práctica, esto significa que puede usar, por ejemplo, String.prototype.trimStart
y Array.prototype.flat
.
Además de ES2019, Node.js 12 también es compatible con BigInt
y matchAll
de ES2020, por lo que incluimos las definiciones adicionales de ES2020.
La configuración completa sería así:
{ "compilerOptions": { "lib": ["es2019", "es2020.bigint", "es2020.string", "es2020.symbol.wellknown"], "module": "commonjs", "target": "es2019" } }
Si tiene como objetivo Node.js 12.9.0
o posterior , simplemente puede especificar "lib": ["es2020"]
ya que esa versión es compatible con todas las funciones y propiedades nuevas introducidas en ES2020. Sin embargo, no es compatible con la nueva sintaxis de JavaScript, por lo que aún debe permanecer en "target": "es2019"
.
La configuración completa sería así:
{ "compilerOptions": { "lib": ["es2020"], "module": "commonjs", "target": "es2019" } }
Si está ejecutando Node.js 16, puede ver mi respuesta similar para Node.js 16 aquí
Si está ejecutando Node.js 14, puede ver mi respuesta similar para Node.js 14 aquí
Si está ejecutando Node.js 10, puede ver mi respuesta similar para Node.js 10 aquí
Si está ejecutando Node.js 8, puede ver mi respuesta similar para Node.js 8 aquí
TL:DR
TypeScript mantiene una asignación de destino, módulo y lib correspondiente a la versión del nodo. Puede encontrarlo aquí https://github.com/microsoft/TypeScript/wiki/Node-Target-Mapping
Es mucho más fácil usar las bases de tsconfig .
Ejecute npm install --save-dev @tsconfig/node12
y luego en tsconfig.json
{ "extends": "@tsconfig/node12/tsconfig.json", // ...your configrations }
Hay algunas bases de tsconfig para diferentes entornos y la comunidad sigue agregando más.