类型系统如何改善您的JavaScript代码

因此,您没有时间来回去,本月已经在争取完成。 根据传统,距离在“ JavaScript Developer”课程上启动新线程还有几天,在开始该课程之前,我们将与您分享有用材料的翻译。

Vanilla JavaScript不是自然输入的。 您甚至可以称他为“智能”,因为他能够计算出数字和字符串。

这使得在浏览器中或运行Node.js时运行JavaScript代码更加容易。 但是,它容易受到众多运行时错误(运行时)的影响,这可能会破坏用户体验。



如果您碰巧将在后面进行描述,那么只有使用类型系统,您才能受益。

  • 收到数据列表后,您发现其中一个记录中不存在某个字段。 如果未发现并没有明确处理此情况,则将导致应用程序出现故障。
  • 您导入的类的实例没有要尝试调用的方法。
  • 您的IDE不知道哪些方法和属性可用于模块和库,因此它无法有效提供自动完成功能。

流,TypeScript或ReasonML

假设您有一个现有的代码库,想要使其更加可靠和稳定。 考虑到现有的键入错误,您可以尝试为此使用Flow或TypeScript(它们具有相当相似的语法)。

另一方面,使用这些庞大的工具中的每一个都是棘手的。 您将承担为以前未开发的代码创建类型和接口的工作。

但是,在添加代码键入时,Flow和TypeScript不能提供100%的安全性。
因此,可以通过推理实现理想的类型安全性,并使注释变量和函数签名更简单。

简单明了的示例

考虑以下代码:

let add = (a, b) => a + b; 

在常规JavaScript中,这些参数可以是数字或字符串。 在TypeScript或Flow中,这些参数可以注释为:

 let add = (a: number, b: number) => a + b 

现在,我们显然正好设置了两个int值。 不是两个浮点数或两个字符串;其他运算符用于它们的加法运算。

现在让我们看一下原因中的一个稍微修改的示例:

 let add = (a: string, b: number) => a + b add('some string', 5) // outputs: "some string5" 

此功能有效! 这似乎令人惊讶。 理性如何理解这一点?

 let add = (a, b) => a + b; add("some string", 5); /* This has type: string but somewhere wanted: int */ 

此功能在实现级别存在缺陷。 原因对于添加int,float和string具有不同的运算符。

这个简单示例的目的是表明即使没有删除应用程序,也可能会有额外的“类型错误”。

在Reason程序中,开发人员不必处理由于类型不兼容或空值而引起的生产错误。

开发人员经验

TypeScript最好的功能之一是,您可以在代码编辑器中看到有关改进或自动完成的建议。

这是TypeScript优先于Reason的一个领域,因为不必完全编译TypeScript程序即可提供自动补全功能。 原因将迫使您在提供有用的修补程序之前纠正语法和类型中的所有错误。

这就是它在VSCode中的工作方式,但是我知道许多使用vim的Reason开发人员。 在这里,我们将不进行比较。

尽管我是Reason的忠实粉丝,但我也使用TypeScript或Flow编写了应用程序。 TypeScript的炒作潮为选择它提供了很好的动力,因此,它得到了社区的大力支持。

另一方面,原因比较难使用,因为可用的文章和文档较少。 我希望随着它的发展将得到纠正。

如果您对Reason感兴趣,可以在此处找到其文档。 在Twitter上关注@jordwalke@jaredforsyth@sgrove等人。 他们可以告诉很多有关Reason / OCaml生态系统的信息。

如果您想知道Reason如何与GraphQL一起使用,请参阅我的另一篇文章, “与GraphQL的理性,类型安全Web应用程序的未来”

我们正在等待对材料的反馈,并按照既定传统邀请所有读者参加开放日开放日将于3月25日由我们的老师Alexander Korzhikov举行

Source: https://habr.com/ru/post/zh-CN444576/


All Articles