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.includes和String.prototype.padStart.
因此完整的配置是:
{
"compilerOptions": {
"lib": ["es2017"],
"module": "commonjs",
"target": "es2017"
}
}
Run Code Online (Sandbox Code Playgroud)
我确定你已经找到了这个,但这里有微软的入门模板: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 次 |
| 最近记录: |