Configurações de tsconfig do TypeScript para Node.js 12?

13

Quais são as tsconfigconfigurações ideais do TypeScript para a saída de código que será executado no Node.js. 12?

Linus Unnebäck
fonte

Respostas:

44

No Node.js 12.0.0, 100% do ES2019 é suportado. Se você souber que está direcionando essa versão ou mais recente, a configuração ideal será semelhante a esta:

  • "module": "commonjs"

    O Node.js está a caminho de adicionar os ES-Modules, mas por enquanto teremos que ficar com o CommonJS.

  • "target": "es2019"

    Isso informa ao TypeScript que não há problema em gerar a sintaxe JavaScript com os recursos do ES2019. Na prática, isso significa que, por exemplo, ele produzirá propriedades de descanso / propagação do objeto e async / aguardará a sintaxe em vez de incorporar um polyfill.

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

    Isso informa ao TypeScript que não há problema em usar funções e propriedades introduzidas no ES2019 ou anterior. Na prática, isso significa que você pode usar, por exemplo, String.prototype.trimStarte Array.prototype.flat.

    Além do ES2019, o Node.js 12 também suporta BigInte matchAlldo ES2020, portanto, incluímos as definições adicionais do ES2020.

A configuração completa seria assim:

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

Se você estiver direcionando o Node.js 12.9.0ou mais recente , pode simplesmente especificar "lib": ["es2020"]como essa versão suporta todas as novas funções e propriedades introduzidas no ES2020. No entanto, ele não suporta a nova sintaxe JavaScript , portanto você ainda precisa permanecer "target": "es2019".

A configuração completa seria assim:

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

Se você estiver executando o Node.js 14, poderá ver minha resposta semelhante para o Node.js 14 aqui

Se você estiver executando o Node.js 10, poderá ver minha resposta semelhante para o Node.js 10 aqui

Se você estiver executando o Node.js 8, poderá ver minha resposta semelhante para o Node.js 8 aqui

Linus Unnebäck
fonte
Será que "target"afetam "lib"de alguma forma, se "lib"for deixado vazio na configuração? Se eu tiver apenas o "target": "es2020"que é "lib"padrão? Isso sempre foi uma fonte de mistério para mim.
Sumomo 28/01
@ Sumum, esta resposta ( stackoverflow.com/a/50987516/148072 ) fornece um pouco de insight. Embora eu não tenha encontrado mais informações sobre o que o "ES6" mais recente fornece para a lib padrão ...
Linus Unnebäck
11
Também existe es2020.promise agora suportado a partir do Nó 12.10.0.
Ivan Yarych 26/02
11
@IvanYarych a parte inferior da minha resposta tem uma seção para Node.js> = 12.9.0 que inclui es2020 que por sua vez inclui es2020.promise
Linus Unnebäck