Каковы оптимальные tsconfig
настройки TypeScript для вывода кода, который будет запускаться на Node.js 12?
источник
Каковы оптимальные tsconfig
настройки TypeScript для вывода кода, который будет запускаться на Node.js 12?
На 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"
умолчанию? Это всегда было для меня загадкой.