4

现在每个人都在强制打字。有很多关于它的粉丝和文章。Angular 团队正在 TS 中制作他们的框架。但是我将 ES6 迁移到 TS 的经历非常令人失望。

上个月,我尝试将我们相对较新的代码库(用 ES6 编写)迁移到 Typescript,但遇到了很多陷阱!

为了清楚起见,我们谈论的是带有 mocha 单元测试和 ESLint 配置的 node.js 应用程序(使用 babel 进行编译)。

首先,为了启用类型检查,我设置了noImplicitAny选项,遇到了数百个错误并修复了它。但在那之后,由于打字稿不理解一些node.js预定义stream的模块,我得到了打字错误,比如(问题实际上更大,因为很多模块都没有打字)。

之后,我安装了typings- 推荐替换用于tsd管理库d.ts文件的工具,但它正在node输入定义,在解决stream问题的同时,添加了很多错误,因为它重复了一些预定义的类型。

另外,我发现 typescript 实际上并没有将 ES6 的很多特性编译到 ES5 中,比如生成器。它迫使我进行复杂的构建过程(TS -> (typescript) ES6 -> (babel) ES5),这意味着我必须浪费我的原始源映射。

以上都花了很多时间来配置。

所以,我很困惑。我真的很喜欢打字稿背后的想法,但实施对我来说似乎很粗鲁。我希望我错了。

也许在实际项目中使用 Typescript 而不是 HelloWorld 的人可以解释我做错了什么?

4

1 回答 1

5

我设置noImplicitAny选项

你有很高的期望。为了在从 ES6 迁移项目时获得更好的体验,请不要使用此选项。

由于 typescript 不理解某些 node.js 预定义模块,例如stream.

没有类型定义的 JS 库很痛苦。但是隐式类型any会拯救你。

之后,我安装了 Typings […] 添加了很多错误,因为它重复了一些预定义的类型。

排除浏览器目录并browser.d.ts从您的tsconfig.json.

另外,我发现 typescript 实际上并没有将 ES6 的许多功能编译到 ES5,例如生成器。它迫使我进行复杂的构建过程(TS -> (typescript) ES6 -> (babel) ES5),这意味着我必须浪费我的原始源映射。

使 TS 真正健壮的设计选择:编译后的代码不需要任何运行时库。

但是你为什么在你生成的 ES6 代码上使用 Babel 呢?使用 Node.js 4 或 5,您的 ES6 代码可以正常工作。

打字稿足够健壮吗?

与 JavaScript VM 一样多。

在 Node.js 上使用目标ES6的TypeScript

从 TS 1.7 开始,该选项--module可以与 target 关联使用es6。例如,在tsconfig.json

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

注意:从 TS 1.8 开始,模块发出时带有"use strict";prologue

于 2016-04-23T09:44:13.080 回答