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,可以解释一下我做错了什么?
我设置了
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一样多.
从TS 1.7开始,该选项--module可以与目标关联使用es6.例如,在tsconfig.json:
"compilerOptions": {
"module": "commonjs",
"target": "es6",
}
Run Code Online (Sandbox Code Playgroud)
注意:从TS 1.8开始,模块会以"use strict";序言发出.