node.js-节点8的推荐打字稿配置

如果要使用节点8编译源,建议为打字稿配置什么?

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

{
  "compilerOptions": {
    "target": "es6",
    "module": "commonjs"
  }
}

但是现在我发现,并非所有可用功能都受支持。 例如target引发错误:类型'string []'不存在属性'includes'。

我发现了一个解决此问题的问题。 解决方法是使用库target。我可以覆盖默认库:lib

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

所以我的问题是:如果要使用节点8,则targetlibmodule的最佳配置是什么?

Xenya asked 2020-01-21T10:20:15Z
2个解决方案
85 votes

自Node.js Array.prototype.includes起,支持100%的ES2017。 如果您知道要针对该版本或更高版本,则最佳配置如下所示:

  • Array.prototype.includes

    Node.js正在添加ES模块的方式上,但是现在我们必须坚持使用CommonJS。

  • Array.prototype.includes

    这告诉TypeScript可以使用ES2017中的功能输出JavaScript语法。 实际上,这意味着它将例如 输出Array.prototype.includes/String.prototype.padStart而不是嵌入polyfill(__awaiter)。

  • Array.prototype.includes

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

因此,完整的配置为:

{
  "compilerOptions": {
    "lib": ["es2017"],
    "module": "commonjs",
    "target": "es2017"
  }
}
Linus Unnebäck answered 2020-01-21T10:21:17Z
2 votes

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

当您仍在Node 8.x上时,请将您的2712278424680399399872设置为ES6lib可以为lib: ["es6", "ES2016.Array.Include"]

Array.includes仅定义编译器用于编译时检查的声明,它不会影响ES6的输出。换句话说,您可以使用所需的任何lib,而不必担心您的编译代码会有所不同(这完全由代码控制 lib: ["es6", "ES2016.Array.Include"])。

在您的情况下使用Array.includes作为ES6会很好,并且会为您提供ES7及以下版本的类型声明。

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

Robula answered 2020-01-21T10:21:55Z
translate from https://stackoverflow.com:/questions/48378495/recommended-typescript-config-for-node-8