将 Typescript 编译为 NodeJs:es6 类型问题
Posted
技术标签:
【中文标题】将 Typescript 编译为 NodeJs:es6 类型问题【英文标题】:Compiling Typescript to NodeJs: es6 types issues 【发布时间】:2017-08-03 07:54:09 【问题描述】:我认为我在与 nodejs 一起使用时缺少 typescript 2 类型系统的一些东西。
情况如下:
将一个用 typescript 编写的小型 nodejs express 服务器编译为纯 es5 以便在节点 6.10.0 下运行(目标:es5在 tsconfig.json 中)。 在我的 package.json 中,我安装了 @types/node (7.0.3) 以获取节点的类型信息。当使用 npm (v3.10.10) 安装我的项目,然后使用 typescript (v2.1.5) 编译它时,我得到一堆或与“Iterable”和“Iterator”符号(它们是 es6 符号)相关的错误。
据我了解,@types/node 使用开箱即用的 es6 类型,假设它们已经可用。
为了拥有 es6 类型(Iterator、Iterable 等),有两种解决方案:
-
添加 core-js 包。
在 tsconfig.json 中以 es6 而不是 es5 为目标,这将强制 typescript 使用它的 lib/lib.es2015..d.ts* 定义文件。
在我看来,第二种方法更好。
这是将 ts 编译到 node 时的官方方式吗? 即:在 tsconfig 中以 es6 为目标?
我如何确定底层节点引擎将有效地支持那些 es6 特性?如果我使用的是不支持 es6 的旧 nodejs 版本怎么办?
我很乐意讨论以清楚地了解底层机制!
谢谢
【问题讨论】:
【参考方案1】:由于 node 还不完全支持所有 es6 功能,请参阅:node green,
最好以 es5 为目标并安装 core-js 类型:
npm install @types/core-js
【讨论】:
我发现 NodeJS 对 ES6 的支持(设置了和声标志)已经有相当长的一段时间了。实际上 6.10.0 是 LTS 版本,它支持大部分(如果不是全部)ES6 特性。强制不使用比 LTS 更早的版本是合理的。简而言之,我现在会选择 ES6以上是关于将 Typescript 编译为 NodeJs:es6 类型问题的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 2015 没有将 TypeScript 编译为 ASP.NET Core 项目的一部分?
编译为 JavaScript 后 TypeScript 出现问题 - “重复标识符错误”
如何在不编译为 JS 的情况下使用用 TypeScript 编写的自定义 tslint 规则和 vscode-tslint?