将 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 出现问题 - “重复标识符错误”

TypeScript入门教程

如何在不编译为 JS 的情况下使用用 TypeScript 编写的自定义 tslint 规则和 vscode-tslint?

故事书.js。如何将组件编译为 ES5 lib

为啥 Typescript 编译器不会将 .ts 更改为 .js?