这些天来,每个人都在强迫打字稿。关于它的粉丝和文章太多了。 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,可以解释一下我做错了什么?
答案 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一样多。
自TS 1.7起,选项--module
可与目标es6
结合使用。例如,tsconfig.json
:
"compilerOptions": {
"module": "commonjs",
"target": "es6",
}
注意:从TS 1.8开始,modules are emitted with a "use strict";
prologue。