背景介绍
从有前端到现在,JavaScript 语言一直都是实现前端逻辑的首选。但是,由于 JavaScript 是一个弱类型语言,很难进行相关的类型检测。因此在构建大型应用时,使用 JavaScript 难免会遇到一些隐式类型转换等相关的问题,从而导致程序的 bug。
在当前的选择中,有两个流派,都能够解决 JavaScript 弱类型语言带来的弊病,给前端带来强类型语言的支持。
-
第一个是 Facebook 提出的 Flow——这个的优点在于我们能够在不对现有代码进行任何改造的情况下,为现有的代码增加一个静态类型检测器,从而避免由于类型转换等问题带来的 bug。
-
第二个是以微软开发的 TypeScript 为首的前端新强类型语言——这类语言的优势是从根本上支持了强类型语言,可以在编译时通过类型推导与判断来从根本上解决类型转换问题,约束开发模型。但是,这类语言的缺点也非常明显,如果需要支持相关的类型检测和推导,那么就需要对原有的代码进行改造,必定会花费一定的人力。在强类型语言中,也分为了两种类型。
-
第一种是 TypeScript 这类对 JavaScript 兼容的语言——正如前面所说,TypeScript 的优势在于:它能够完全兼容 JavaScript 语言。具体是什么意思呢,就是说你的代码可以是部分 TypeScript 语言,部分 JavaScript 语言的。TypeScript 的代码可以调用 JavaScript 的代码,同时反过来也可以成立;缺点也是由于对 JavaScript 的兼容:由于需要完全兼容 JavaScript,因此它没有办法舍弃一些 JavaScript 中的一些缺陷。
-
第二种则是我们在本文中需要介绍的 ReasonML ,这类对 JavaScript 不兼容的语言——与第一种完全相反,由于不需要兼容 JavaScript,我们可以完全舍弃 JavaScript 的缺陷,用一套新的语法规则来实现我们的需求;但是,由于不兼容 JavaScript 语言,因此我们在开发时只能从头开始进行项目的开发,也不能充分发挥 JavaScript 生态带来的优势。
-
作为最近被大家关注的越来越多的强类型语言,ReasonML 的发展也是需要我们持续关注的。
ReasonML 起源
说了这么多背景,我们来正式介绍下 ReasonML 这门语言。首先,让我们来看下[官网][1]对于 ReasonML 的介绍。
Reason lets you write simple, fast and quality type safe code while leveraging both the JavaScript & OCaml ecosystems. Reason利用 JavaScript 和 OCaml 语言的生态,让你编写简单、快速和高质量类型安全的代码。
从这个介绍中我们可以知道, ReasonML 是从 OCaml 语言衍生出来的,可以支持 JavaScript 的新的强类型语言。首页介绍中,还提到了这个语言的三个特点:
-
无争论的类型系统(Types w