¿Configuración de tsconfig de TypeScript para Node.js 12?

13

¿Cuál es la tsconfigconfiguración óptima de TypeScript para generar código que se ejecutará en Node.js 12?

Linus Unnebäck
fuente

Respuestas:

45

A partir de Node.js 12.0.0, se admite el 100% de ES2019. Si sabe que está apuntando a esa versión o más nueva, la configuración óptima se vería así:

  • "module": "commonjs"

    Node.js está en camino de agregar módulos ES, pero por ahora tendremos que seguir con CommonJS.

  • "target": "es2019"

    Esto le dice a TypeScript que está bien generar sintaxis JavaScript con características de ES2019. En la práctica, esto significa que, por ejemplo, generará propiedades de descanso / dispersión de objetos y sintaxis asíncrona / espera en lugar de incrustar un polyfill.

  • "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 anteriores. En la práctica, esto significa que puede usar, por ejemplo, String.prototype.trimStarty Array.prototype.flat.

    Además de ES2019, Node.js 12 también admite BigInty matchAlldesde ES2020, por lo tanto, incluimos las definiciones adicionales de ES2020.

La configuración completa sería:

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

Si está apuntando a Node.js 12.9.0o posterior , simplemente puede especificar "lib": ["es2020"]que esa versión admite todas las nuevas funciones y propiedades introducidas en ES2020. Sin embargo, no es compatible con la nueva sintaxis de JavaScript , por lo que aún debe permanecer "target": "es2019".

La configuración completa sería:

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

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í

Linus Unnebäck
fuente
no "target"afectará"lib" de ninguna manera si "lib"se deja vacía en la configuración? Si solo tengo "target": "es2020"lo que hace "lib"predeterminado? Esto siempre ha sido una fuente de misterio para mí.
Sumomo
@Sumomo esta respuesta ( stackoverflow.com/a/50987516/148072 ) proporciona un poco de información. Aunque no he encontrado más información sobre lo más nuevo que "ES6" proporciona para la
biblioteca
1
También hay es2020.promise allí ahora que es compatible a partir del Nodo 12.10.0.
Ivan Yarych
1
@IvanYarych la parte inferior de mi respuesta tiene una sección para Node.js> = 12.9.0 que incluye es2020 que a su vez incluye es2020.promise
Linus Unnebäck