推荐的节点8的typescript配置

Xen*_*nya 53 node.js typescript

如果我想使用节点8编译源代码,那么打印的typescript配置是什么?

大多数教程使用以下tsconig.json:

{
  "compilerOptions": {
    "target": "es6",
    "module": "commonjs"
  }
}
Run Code Online (Sandbox Code Playgroud)

但现在我发现,并非所有可用功能都受支持.例如,['foo'].includes('bar')抛出错误:类型'string []'上不存在属性'includes'.

我发现一个问题,解决这个问题.解决方案是使用lib es7.我可以覆盖默认的libs:"lib": ["es7"]

但是我不确定这是否是节点8的最佳配置 - 是否有更多不受该lib支持的功能?是否定义了很多功能?

所以我的问题是:什么是最好的配置target,lib并且module如果我想使用节点8?

Lin*_*äck 88

从Node.js开始8.10.0,支持100%的ES2017.如果您知道自己定位的是该版本或更新版本,则最佳配置如下所示:

  • "module": "commonjs"

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

  • "target": "es2017"

    这告诉TypeScript可以输出带有ES2017功能的JavaScript 语法.在实践中,这意味着它将例如输出async/ await而不是嵌入polyfill(__awaiter).

  • "lib": ["es2017"]

    这告诉TypeScript可以使用ES2017或更早版本中引入的函数和属性.在实践中,这意味着您可以使用eg Array.prototype.includesString.prototype.padStart.

因此完整的配置是:

{
  "compilerOptions": {
    "lib": ["es2017"],
    "module": "commonjs",
    "target": "es2017"
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 哇,我看了node.green并且永远不会发现它,因为它被埋在9.11.1标题下.我希望有一种方法来指定表中显示的版本.谢谢你的帮助. (6认同)
  • https://node.green/是Kangax表的更新版本,专为Node.js版本量身定制,这就是我所看到的 (4认同)

Rob*_*ula 5

我确定你已经找到了这个,但这里有微软的入门模板:https : //github.com/Microsoft/TypeScript-Node-Starter

虽然您仍在使用 Node 8.x,但请保持您的module设置为commonjs,target可以是es6

compilerOptions.lib仅定义编译器用于编译时检查的声明,它不会影响tsc. 换句话说,您可以使用任何lib您想要的东西,而不必担心您的转译代码会有所不同(这完全由 控制compilerOptions.target)。

在您的情况下使用es7as alib会很好,并且会为您提供 ES7 及以下的类型声明。

Array.includes是 ES7 (ES2016),因此您发现它不是ES6. 你可以将你定义lib为; lib: ["es6", "ES2016.Array.Include"]解决您的问题。


归档时间:

查看次数:

12529 次

最近记录:

6 年,2 月 前