flow和typescript各自的好处

原创 2016-10-31 15:50:04 791
摘要:TypeScript 相当于一个 Web 开发经典套餐:你需要最新(甚至还在讨论中)的 es 特性,ts 包含了;你需要 xml in js,ts 包含了(.tsx);你需要静态类型检查,ts 包含了。而 Babel 相当于一个自助餐:你需要最新的 es 特性?有别人帮你写好了,自己去找就行;你需要 xml in js?也有人帮你写好了,自己去找吧;你需要静态类型检查?同样有人帮你写好了,再去找找

TypeScript 相当于一个 Web 开发经典套餐:

你需要最新(甚至还在讨论中)的 es 特性,ts 包含了;

你需要 xml in js,ts 包含了(.tsx);

你需要静态类型检查,ts 包含了。


而 Babel 相当于一个自助餐:

你需要最新的 es 特性?有别人帮你写好了,自己去找就行;

你需要 xml in js?也有人帮你写好了,自己去找吧;

你需要静态类型检查?同样有人帮你写好了,再去找找看吧。


不过虽然 Babel 具有较高的自助性,但实际项目中我们也可以不选择一手服务,而是通过第三方的打包服务(各种脚手架,Seed),之后效果上和推荐套餐也没有很大区别。

不过仍然有一些行为无法简单抹平,比如:

Babel 可以很方便地进行语法扩展,如果你需要的不只是别人写好的东西,还需要附带自己实现的额外的语言特性,那么 Babel 可以很方便地实现扩展;而 TypeScript 的语言扩展功能还在开发中(TypeScript extensibility · Issue #6508 · Microsoft/TypeScript · GitHub),虽然也可以通过封装强行扩展(比如 https://www.npmjs.com/package/@angular/tsc-wrapped),但是相对而言成本较高;

由于 TypeScript 提供一体化解决方案,可以把语言服务本身也作为发行内容(tsserver),供每个编辑器或者 IDE 使用(只需简单整合),甚至可以在不需要编辑器或者插件更新的情况下就能支持新的 TypeScript 语言特性(因此也确实难以扩展,因为不仅要扩展编译器还要扩展语言服务);而 Babel 仅仅提供编译功能,开发环境支持只能靠编辑器本身或者插件来提供,因此对于不同的 Babel 功能可能需要不同的插件来提供,甚至可能会出现冲突,以及使用的某些语言特性在某个编辑器上没有对应支持的情况。


至于说 Type Guard 的能力之类的,TypeScript 和 Flow 都在持续演进(相互借鉴)中,今天的差别已经基本不大了。

对于要说 TypeScript 有个别非 JavaScript 的特性以至于无法在项目中方便地来回切换开发语言的,无力反驳,喜欢切来切去多切切就好了,既然知道要切来切去别用不属于 js 的特性就行了,并不是说所有特性都是一定要用的。而且现在的 TypeScript 也已经非常保守了,不再接受新的运行时特性了,也就只剩下 enum 和 namespace 是不属于 js 的东西。

不过,对于普通的吃瓜群众而言,完全不需要关心这么多,按照自己的喜好站队就可以了。。-_-||


发布手记

热门词条