打字稿足够健壮吗?

时间:2016-04-23 07:51:58

标签: node.js typescript tooling

这些天来,每个人都在强迫打字稿。关于它的粉丝和文章太多了。 Angular团队正在TS中制作他们的框架。 但是我将ES6迁移到TS的经历非常令人失望。

上个月我尝试将相对新鲜的代码库(在ES6中编写)迁移到Typescript并面临大量陷阱!

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

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

之后,我安装了typings - 建议替换tsd工具来管理库d.ts文件,但它的node输入定义,同时解析{ {1}}问题,增加了很多错误,因为它复制了一些预定义的类型。

此外,我发现打字稿实际上并没有将ES6的许多功能实际编译成ES5,例如生成器。 它迫使我制作复杂的构建过程(TS - >(打字稿)ES6 - >(babel)ES5),这意味着我不得不浪费原始的源地图。

上述所有内容都需要花费大量时间进行配置。

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

也许有人在真实项目中使用过Typescript而不是HelloWorld,可以解释一下我做错了什么?

1 个答案:

答案 0 :(得分:5)

  

我设置了noImplicitAny选项

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

  

由于打字稿不理解某些node.js预定义模块,我输入了错误,例如stream

没有类型定义的JS库很痛苦。但隐式类型any将为您节省开支。

  

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

browser.d.ts

中排除浏览器目录和tsconfig.json
  

此外,我发现打字稿实际上并没有将ES6的许多功能编译成ES5,例如生成器。它迫使我制作复杂的构建过程(TS - >(打字稿)ES6 - >(babel)ES5),这意味着我不得不浪费原始的源地图。

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

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

  

打字稿足够健壮吗?

与JavaScript VM一样多。

在Node.js

上具有目标 ES6 的TypeScript

自TS 1.7起,选项--module可与目标es6结合使用。例如,tsconfig.json

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

注意:从TS 1.8开始,modules are emitted with a "use strict"; prologue