Настройки tsconfig TypeScript для Node.js 12?

13

Каковы оптимальные tsconfigнастройки TypeScript для вывода кода, который будет запускаться на Node.js 12?

Линус Уннебек
источник

Ответы:

45

На Node.js 12.0.0поддерживается 100% ES2019. Если вы знаете, что нацелены на эту версию или более новую, оптимальная конфигурация будет выглядеть следующим образом:

  • "module": "commonjs"

    Node.js находится на пути к добавлению ES-модулей, но сейчас нам нужно придерживаться CommonJS.

  • "target": "es2019"

    Это говорит TypeScript, что можно выводить синтаксис JavaScript с функциями из ES2019. На практике это означает, что он будет, например, выводить свойства отдыха / распространения объекта и синтаксис async / await вместо встраивания полифилла.

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

    Это говорит TypeScript, что можно использовать функции и свойства, представленные в ES2019 или более ранних версиях. На практике это означает, что вы можете использовать, например, String.prototype.trimStartи Array.prototype.flat.

    В дополнение к ES2019 Node.js 12 также поддерживает BigIntи matchAllиз ES2020, поэтому мы включаем дополнительные определения из ES2020.

Таким образом, полная конфигурация будет такой:

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

Если вы нацелены на Node.js 12.9.0или новее , вы можете просто указать, "lib": ["es2020"]что эта версия поддерживает все новые функции и свойства, представленные в ES2020. Однако он не поддерживает новый синтаксис JavaScript , поэтому вам все равно придется остаться "target": "es2019".

Таким образом, полная конфигурация будет такой:

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

Если вы используете Node.js 14, вы можете увидеть мой аналогичный ответ для Node.js 14 здесь

Если вы используете Node.js 10, вы можете увидеть мой аналогичный ответ для Node.js 10 здесь

Если вы используете Node.js 8, вы можете увидеть мой аналогичный ответ для Node.js 8 здесь

Линус Уннебек
источник
Есть ли "target"повлиять "lib"каким - либо образом , если "lib"оставить пустым в конфигурации? Если у меня есть только "target": "es2020"то, что по "lib"умолчанию? Это всегда было для меня загадкой.
Сумомо
@Sumomo этот ответ ( stackoverflow.com/a/50987516/148072 ) дает немного понимания. Хотя я не нашел больше информации о том, что новее, чем "ES6", предоставляет библиотеку по умолчанию ...
Линус Уннебек
1
Там также есть es2020.promise, который поддерживается начиная с узла 12.10.0.
Иван Ярыч
1
@IvanYarych В нижней части моего ответа есть раздел для Node.js> = 12.9.0, который включает es2020, который, в свою очередь, включает es2020.promise
Линус Уннебек