Node.js 10 的 TypeScript tsconfig 设置?

Posted

技术标签:

【中文标题】Node.js 10 的 TypeScript tsconfig 设置?【英文标题】:TypeScript tsconfig settings for Node.js 10? 【发布时间】:2019-01-13 22:21:18 【问题描述】:

有谁知道 Node.js v10.x 需要哪些目标/库才能在没有生成器的情况下使用内置的 async/await?我看到很多节点 8 但不是节点 10。

【问题讨论】:

How do I find the latest Typescript target support for any version of node?的可能重复 【参考方案1】:

根据recommended typescript config for node 8,--target ES2017 在 Node 8.10.0 和更高版本(包括 Node 10)上受支持,并且将异步函数传递到输出而不将它们转换为生成器就足够了。

【讨论】:

Node 10 支持 100% 的 ES2018 功能,因此您可以针对 node.green/#ES2018【参考方案2】:

从 Node.js 10.0.0 开始,支持 100% 的 ES2018。如果您知道您的目标是该版本或更高版本,则最佳配置如下所示:

"module": "commonjs"

Node.js 正在添加 ES-Modules,但现在我们必须坚持使用 CommonJS。

"target": "es2018"

这告诉 TypeScript 可以输出带有 ES2018 特性的 javascript 语法。在实践中,这意味着它将例如输出对象 rest/spread 属性和 async/await 语法,而不是嵌入 polyfill。

"lib": ["es2018"]

这告诉 TypeScript 可以使用 ES2018 或更早版本中引入的函数和属性。在实践中,这意味着您可以使用例如Promise.prototype.finallyArray.prototype.includesString.prototype.padStart

完整的配置将是:


  "compilerOptions": 
    "lib": ["es2018"],
    "module": "commonjs",
    "target": "es2018"
  


如果你运行的是 Node.js 16,你可以看到我的similar answer for Node.js 16 here

如果你运行的是 Node.js 14,你可以看到我的 similar answer for Node.js 14 here

如果你运行的是 Node.js 12,你可以看到我的 similar answer for Node.js 12 here

如果你运行的是 Node.js 8,你可以看到我的similar answer for Node.js 8 here

【讨论】:

为什么不"lib": ["esnext"]?您希望在编写代码时能够使用最新的功能。 target 中不存在的任何功能都将由 typescript 编译器转换为适用于该目标。 @VivekMaharajh TypeScript 不添加 polyfill,例如Promise.prototype.finally,因此如果您使用 "lib": ["esnext"],您可能会意外使用 Node.js 10 中不可用的功能。通过发布的答案,您仍然可以利用所有新的 语言功能 i>,只是不是新的库函数,因为它们在您的目标上不可用。 哦,很高兴知道。我一直认为,如果 typescript 编译器无法将源代码转换为目标,它就会失败。 节点 12 有什么变化吗? @Tom 是的,看到这里:***.com/a/59787575/148072

以上是关于Node.js 10 的 TypeScript tsconfig 设置?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Visual Studio 2012 express 进行 TypeScript、node.js 开发

Node.js、TypeScript、JavaScript 和 Angular 之间的连接 [关闭]

如何删除多行 typeorm - postgresql 和 node.js(typescript)

Typescript 和 Node.js 错误“SyntaxError:无法在模块外使用导入语句”

创建Node.js TypeScript后端项目

Typescript:如何解析 node.js 的绝对模块路径?