Maison >interface Web >js tutoriel >ReScript n'est pas encore là
En tant que fan des langages inspirés du ML, j'ai toujours trouvé ReScript intriguant. Avec l'attente asynchrone récemment ajoutée au langage, est-il temps pour ReScript de briller ?
Ça a l'air vraiment séduisant :
... vous pouvez récupérer ReScript et accéder au vaste écosystème et aux outils JavaScript comme si vous connaissiez ReScript depuis longtemps1
Ne vous oblige pas à rechercher des bibliothèques de liaisons prédéfinies créées par d'autres. ReScript n'a pas besoin de l'équivalent de DefinitelyTyped de TypeScript.2
Quel est le but de ce projet ?
Notre objectif est de fournir la meilleure expérience de langage typé pour la plateforme JavaScript.3
Wow, ils offrent donc la meilleure expérience de langage typé pour la plate-forme JavaScript, le tout sans avoir besoin de liaisons prédéfinies ! Essayons !
Nous nous heurtons rapidement à un mur alors que nous essayons de faire la chose la plus élémentaire possible :
Hmm... pourquoi getElementById n'est-il pas sur le document ? Quel est le type de document ?
Cette image est tout ce que la documentation ReScript a à dire à ce sujet. Pas de définition de Dom.document. F12 nous fait descendre une chaîne de définitions de types vides, donc Dom.document ressemble à un simple alias pour le document JS, rien de plus.
Attendez, alors j'ai besoin de reliures préfabriquées ? Qu'est-il arrivé à « Ne vous oblige pas à rechercher des bibliothèques de liaisons prédéfinies créées par d'autres » ?
Entrez le package npm rescript-webapi, Liaisons au DOM et à d'autres API Web spécifiques au navigateur.. Je suis les instructions et les erreurs du compilateur, dont une m'indiquant que je pourrais avoir un problème de configuration dans "bsconfig.json", même si ce fichier s'appelle désormais "rescript.json". Finalement, ça marche.
Voici à quoi ça ressemble :
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")
Vous remarquerez ce document. n'affichera aucune complétion de code, car il n'est toujours pas typé. Je dois savoir quel module et quelle fonction de module appeler.
Donc l'IDE ne m'aidera pas à taper la bonne chose, mais me donnera-t-il de bonnes informations sur la fonction que j'appelle ? Pas vraiment :
Pour référence, voici TypeScript prêt à l'emploi :
Erreur informative, lien vers des exemples, définition détaillée du type. Merci. Cela me fait gagner du temps, des efforts et m'apprend au fur et à mesure que je tape - c'est l'une des principales raisons pour lesquelles j'aime la saisie statique. Je ne comprends tout simplement pas cela avec ReScript.
Si l'interaction avec le DOM - la raison pour laquelle JavaScript a été créé - n'est pas jugée suffisamment importante pour justifier des liaisons intégrées, je pense en avoir vu assez.
ReScript est-il prêt en 2024 ? Non. Sa documentation officielle fait de nobles promesses qui semblent carrément trompeuses. Je suppose que ReScript peut être utile si vous écrivez beaucoup de code ReScript qui interagit principalement avec d'autres codes ReScript. Mais on ne peut pas simplement ignorer « le vaste écosystème JavaScript ». Imaginez F# sans prise en charge de la BCL. Heureusement, F# et ses outils ont été conçus pour utiliser les types et la documentation C# de manière transparente. Il doit sûrement y avoir un moyen d'exploiter DefinitelyTyped dans ReScript. Jusqu'à ce que ReScript fasse cela, je ne pense pas qu'il puisse sérieusement rivaliser avec TypeScript.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!