为什么前端框架VUE到前端组件SpreadJS都选择了TypeScript

近期VUE做者尤雨溪发文阐述了Vue 3的设计过程,其中专门用一段落说明了切换到TypeScript开发的缘由,尤大也在不一样场合屡次提到了TypeScript的优点,并总结说“真香”。前端

简单来讲,VUE 3使用TypeScript做为开发语言有如下几点:vue

  1. 类型系统对于VUE这种规模的项目是十分必要的。“类型检查极大地减小了在重构期间引入意外错误的机会,并有助于贡献者更自信的进行重要的更改”。
  2. TS和Visual Studio Code的深度集成,TS 团队确实是在用心作事的。
  3. 使用TS的用户愈来愈多,VUE 3须要增强支持,直接使用TS减轻了维护负担。

关于TypeScript的优势有太多文章了,这里只从SpreadJS项目实际讲讲SpreadJS为什么选择了TS,以及TS为SpreadJS带来了什么。程序员

其实早在TypeScript还在RC版本时,SpreadJS团队已经使用TS了。当时在Visual Studio使用TS的确是为了让.NET 程序员写JavaScript,同时因为历史缘由SpreadJS的早期一部分代码是直接从Spread .NET 版本移植而来,不少.NET代码复制过来就能用,节省了很大的迁移工做量,也保证了迁移到前端的代码质量。可是因为早期TS编译出来的JavaScript代码过于冗余,致使SpreadJS发布包过于臃肿,同时从.NET迁移过来的代码并不符合前端JS的风格,在开发人员的反对声中,SpreadJS用纯JavaScript进行了重构。设计模式

切换到JS后架构团队仍然对TS持续关注,随着TS的升级优化,项目构建工具的优化,团队能够有效的控制TS编译成JS代码的大小,SpreadJS在V11 SP2从新拥抱TS。安全

SpreadJS再次选择TypeScript做为开发语言主要有如下几点:闭包

  1. 类型系统

    “类型系统对于SpreadJS这种规模的项目是十分必要的”!和VUE的缘由同样,重构在开发过程当中时刻发生,在静态类型检测的支持下调整一个模块中接口或者属性名称变得十分安全快捷,同时有Visual Code的配合,属性或者变量改名只须要一个F2进行rename便可完成。架构

    SpreadJS是多团队模块化开发,一些基础模块多项目共用。静态类型的API对开发和最终用户都是友好的,每次为了纠结接口中options是否带“s”而去查询文档对开发人员是十分痛苦的,有了Interface,不须要开发文档开发也能够方便的使用基础模块。框架

  2. 面向对象

    SpreadJS的设计是面向对象的,咱们经常使用的Picture是从FloatingObject继承,CellType中有核心的基类Base CellType。在前端项目工程化的过程当中,OOP和设计模式的使用是必然的,TypeScript让这些都变得更加简单。举例来讲,属性、方法的做用域对于组件开发是很是重要的,在JS中封装私有变量须要使用闭包,大量的闭包在代码中十分不友好,而在TS中直接使用private修饰符便可。frontend

  3. 开发环境

    首先我实现想不出不用Visual Code的理由,再加上VSCode对TS的深度支持,以及Chrome支持TS的直接调试,一切都变得瓜熟蒂落。模块化

看起来SpreadJS使用TypeScript的理由十分简单,固然也有其余缘由,但正是这些简单的理由让SpreadJS的开发团队效率提高了40%,项目更易维护,模块功能更易拓展、测试。SpreadJS在开发过程当中经历了JS和TS的相互切换,用实践证实了TS对项目带来的积极影响。

固然任何事情都有两面性,那么对于不用TypeScript的几个常见理由SpreadJS是如何解决的:

  1. 学习曲线过于陡峭。

    做为SpreadJS的开发,ES6须要学习吗,OOP须要学习吗,设计模式须要学习吗?都须要,那TS还难吗,学不会吗?

  2. 它破坏了 JS 的动态特性。

    SpreadJS项目须要静态的类型检查!

  3. 转换现有项目的工做量太大。

    的确如此,项目投入了一个迭代周期进行TS的重构,可是这样作是值得的。当时,TS已经严格遵循 ECMAScript 规范,同时自己项目面向对象的设计,在转换过程当中无需大量的设计重构,更多的是类和接口的声明以及类型的转换,来消除掉编译器提示的错误。

  4. 使用的库都是用 JavaScript 编写的。

    过去多是比较大的问题,可是随着社区生态的创建,流行的JS库都有@types的支持,Babel 7也支持了TS。好比SpreadJS使用到的jszip和pdfkit都有对应的d.ts。若是您想用的库还没TS的支持,那可能它好久没人用了。

总结来讲,若是您在开发像VUE、SpreadJS同样的底层框架或者基础组件;使用三大框架开发SPA项目;项目由多团队分多模块共同开发,那么是时候拥抱TypeScript了。

相关文章
相关标签/搜索