Heim > Artikel > Web-Frontend > ReScript ist noch nicht da
Als Fan von ML-inspirierten Sprachen fand ich ReScript immer faszinierend. Ist es an der Zeit, dass ReScript glänzt, nachdem async-await der Sprache kürzlich hinzugefügt wurde?
Es sieht auf jeden Fall verlockend aus:
... Sie können ReScript in die Hand nehmen und auf das umfangreiche JavaScript-Ökosystem und die Tools zugreifen, als ob Sie ReScript schon lange kennen würden1
Zwingt Sie nicht dazu, nach vorgefertigten Bindungsbibliotheken anderer zu suchen. ReScript benötigt nicht das Äquivalent von DefinitelyTyped von TypeScript.2
Was ist das Ziel dieses Projekts?
Unser Ziel ist es, das beste getippte Spracherlebnis für die JavaScript-Plattform zu bieten.3
Wow, sie bieten das beste getippte Spracherlebnis für die JavaScript-Plattform, und das alles ohne die Notwendigkeit vorgefertigter Bindungen! Lass es uns versuchen!
Wir stoßen schnell an eine Wand, während wir versuchen, das Grundlegendste zu tun, was möglich ist:
Hmm... warum steht getElementById nicht im Dokument? Um welche Art von Dokument handelt es sich?
Dieses Bild ist alles, was die ReScript-Dokumentation darüber zu sagen hat. Keine Definition von Dom.document. F12 führt uns durch eine Kette leerer Typdefinitionen, sodass Dom.document wie ein einfacher Alias für das JS-Dokument aussieht, mehr nicht.
Warten Sie, ich brauche also vorgefertigte Bindungen? Was ist mit „Zwingt Sie nicht dazu, nach vorgefertigten Bindungsbibliotheken anderer zu suchen“ passiert?
Geben Sie das rescript-webapi npm-Paket ein, Bindungen an das DOM und andere browserspezifische Web-APIs.. Ich folge den Anweisungen und Compiler-Fehlern, darunter einer, der mir mitteilt, dass möglicherweise ein Konfigurationsproblem in „bsconfig.json“ vorliegt, obwohl diese Datei jetzt „rescript.json“ heißt. Irgendwann kriege ich das hin.
So sieht es aus:
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")
Sie werden dieses Dokument bemerken. wird keine Code-Vervollständigung anzeigen, da er grundsätzlich noch untypisiert ist. Ich muss wissen, welches Modul und welche Modulfunktion ich aufrufen soll.
Die IDE hilft mir also nicht dabei, das Richtige einzugeben, aber liefert sie mir gute Informationen über die Funktion, die ich aufrufe? Nicht wirklich:
Zur Referenz: Hier ist TypeScript sofort einsatzbereit:
Informativer Fehler, Link zu Beispielen, detaillierte Typdefinition. Danke schön. Das spart mir Zeit und Mühe und bringt mir beim Tippen das Richtige bei – das ist einer der Hauptgründe, warum ich statisches Tippen mag. Mit ReScript bekomme ich das einfach nicht hin.
Wenn die Interaktion mit dem DOM – der Grund, warum JavaScript erstellt wurde – nicht als wichtig genug erachtet wird, um integrierte Bindungen zu rechtfertigen, glaube ich, dass ich genug gesehen habe.
Ist ReScript im Jahr 2024 fertig? Nein. Die offizielle Dokumentation macht hohe Versprechungen, die völlig irreführend erscheinen. Ich denke, ReScript kann nützlich sein, wenn Sie viel ReScript-Code schreiben, der hauptsächlich mit anderem ReScript-Code interagiert. Aber man kann „das riesige JavaScript-Ökosystem“ nicht einfach ignorieren. Stellen Sie sich F# ohne Unterstützung für die BCL vor. Glücklicherweise wurden F# und seine Tools so konzipiert, dass sie C#-Typen und -Dokumentation nahtlos nutzen können. Sicherlich muss es eine Möglichkeit geben, DefinitelyTyped in ReScript zu nutzen. Bis ReScript dies tut, glaube ich nicht, dass es ernsthaft mit TypeScript konkurrieren kann.
Das obige ist der detaillierte Inhalt vonReScript ist noch nicht da. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!