如果要使用节点8编译源代码,建议为打字稿配置什么?
大多数教程使用以下 tsconig.json :
{ "compilerOptions": { "target": "es6", "module": "commonjs" } }
但是现在我发现,并非所有可用功能都受支持。例如,['foo'].includes('bar')抛出错误: 类型’string []’不存在属性’includes’。
['foo'].includes('bar')
我发现了一个问题,即解决了这个问题。解决方法是使用lib es7。我可以覆盖默认库:"lib": ["es7"]
es7
"lib": ["es7"]
但是我不确定这是否是节点8的最佳配置-该库不支持更多功能吗?是否定义了很多功能?
所以我的问题是:最好的配置是什么target,lib以及module是否要使用节点8?
target
lib
module
从Node.js开始8.10.0,支持100%的ES2017。如果您知道要针对该版本或更高版本,则最佳配置应如下所示:
8.10.0
"module": "commonjs"
Node.js是添加ES模块的一种方式,但是现在我们必须坚持使用CommonJS。
"target": "es2017"
这告诉TypeScript可以使用ES2017中的功能输出JavaScript 语法 。实际上,这意味着它将例如输出async/ await而不是嵌入polyfill(__awaiter)。
async
await
__awaiter
"lib": ["es2017"]
这告诉TypeScript可以使用ES2017或更早版本中引入的 函数和属性 。实际上,这意味着您可以使用eg Array.prototype.includes和String.prototype.padStart。
Array.prototype.includes
String.prototype.padStart
因此,完整的配置为:
{ "compilerOptions": { "lib": ["es2017"], "module": "commonjs", "target": "es2017" } }