作为受 ML 启发的语言的粉丝,我总是觉得 ReScript 很有趣。随着 async-await 最近被添加到该语言中,是时候 ReScript 大放异彩了吗?
看起来确实很诱人:
...您可以选择 ReScript 并访问庞大的 JavaScript 生态系统和工具,就像您早已了解 ReScript 一样1
不会强迫您搜索其他人制作的预制绑定库。 ReScript 不需要 TypeScript 的 DefinelyTyped 等价物。2
这个项目的目标是什么?
我们的目标是为 JavaScript 平台提供最佳的类型化语言体验。3
哇,所以它们为 JavaScript 平台提供了最好的类型化语言体验,而这一切都不需要预先制作的绑定!让我们来尝试一下吧!
当我们尝试做最基本的事情时,我们很快就碰壁了:
嗯..为什么 getElementById 不在文档中?文件类型是什么?
这张图片是 ReScript 文档中关于它的所有内容。没有 Dom.document 的定义。 F12 引导我们进入一串空类型定义,因此 Dom.document 看起来确实像是 JS 文档的简单别名,仅此而已。
等等,所以我确实需要预制绑定? “不强迫你搜索别人制作的预制绑定库”怎么了?
输入 rescript-webapi npm 包,绑定到 DOM 和其他浏览器特定的 Web API。。我按照说明和编译器错误进行操作,其中一个错误告诉我“bsconfig.json”中可能存在配置问题,即使该文件现在称为“rescript.json”。我最终成功了。
它的外观如下:
let elem = document->Document.getElementById("id") // For the uninitiated, -> is the pipe operator. // a->foo means foo(a) // a->foo(b) means foo(a, b) // The above code is therefore equivalent to let elem = Document.getElementById(document, "id")
您会注意到该文档。不会显示任何代码完成,因为它基本上仍然是非类型化的。我必须知道要调用什么模块和模块函数。
所以 IDE 不会帮助我输入正确的内容,但它会为我提供有关我正在调用的函数的详细信息吗?不完全是:
作为参考,这里是开箱即用的 TypeScript:
信息错误、示例链接、详细类型定义。谢谢。这节省了我的时间和精力,在我打字时教我正确的方法——这是我喜欢静态类型的主要原因之一。我只是无法通过 ReScript 得到这个。
如果与 DOM 交互 - 创建 JavaScript 的原因 - 不被认为重要到足以保证内置绑定,我想我已经看够了。
ReScript 在 2024 年准备好了吗?不。它的官方文件做出了看似完全具有误导性的崇高承诺。我想如果您要编写大量主要与其他 ReScript 代码交互的 ReScript 代码,ReScript 会很有用。但我们不能简单地忽视“庞大的 JavaScript 生态系统”。想象一下不支持 BCL 的 F#。幸运的是,F# 及其工具旨在无缝使用 C# 类型和文档。当然,一定有一种方法可以在 ReScript 中利用 DefinelyTyped。在 ReScript 做到这一点之前,我认为它无法与 TypeScript 真正竞争。
以上是ReScript 还没有出现的详细内容。更多信息请关注PHP中文网其他相关文章!