打字稿足够强大吗?

Ele*_*erm 4 node.js tooling typescript

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

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

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

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

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

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

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

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

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

Pal*_*leo 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",
}
Run Code Online (Sandbox Code Playgroud)

注意:从TS 1.8开始,模块会以"use strict";序言发出.

  • 节点5具有允许不要求严格的标志.这些是我使用的标志,以使节点5与Typescript` --use_strict --harmony --harmony_default_parameters --harmony_destructuring`一起正常工作.虽然Node 6即将发布,但其中大部分将成为默认值. (2认同)