当前位置: 首页 > 后端技术 > Java

ReScript和TypeScript,谁是前端圈子里的“当红辣子鸡”

时间:2023-04-01 18:30:04 Java

摘要:ReScript和TypeScript看似都比较擅长使用JavaScript,但两者还是有很大的区别。本文分享自华为云社区《【云创共驻】ReScript 和 TypeScript 有什么异同?》,作者:胡奇。“有人的地方就有江湖,有江湖的地方就有纷争”。前端开发领域也是如此江湖。新技术的诞生往往伴随着无休止的争论。作为从业者,理性看待。毕竟,“不顾业务场景,只谈技术选型,就是耍流氓。”不过,今天我们就来“耍流氓”,聊一聊ReScript和TypeScript背景关于“ReScript和TypeScript有什么异同?”,知乎上已经有大佬在讨论了,作为圈内的“吃瓜群众”业界,我发现何士君也关注了这个问题,也许关于ReScript和TypeScript的讨论在未来的日子里会越来越激烈,毕竟ReScript是“快速、简单、全类型的JavaScript来自thefuture"。)也能找到《JavaScript的另一种替代方案:ReScript》、《什么是ReScript,更好的TypeScript?知识渊博网上讨论比较激烈:网友1:ReScript是高手利器,TypeScript更像Java,好招网友2:5年前,人们会说“TypeScript是高手利器”硕士,而JavaScript更像Java,所以很容易招人。”相信大家对TypeScript都不陌生。VSCode是用TypeScript编写的。前端圈流传着这样一种说法,“凡是可以用JavaScript实现的应用系统,最终都会用TypeScript实现”。几乎所有的前端开源项目都在拥抱TypeScript,简直就是前端圈子里的“人气辣子鸡”。相比之下,ReScript暂时还没有那么出名,但毕竟属于未来。虽然目前Github上的star数表明ReScript还不足以撼动TypeScript几近“垄断”的“霸主地位”,但正所谓“三年河东,三十年河西”,着眼未来,ReScript是目前“最被低估的技术”。从另一个角度来看,ReScript的核心开发者有一个和Vue.js一样耳熟能详的中文名字——张洪波。作者也希望ReScript也能有一个强大的中文社区。同一个目标。ReScript和TypeScript最大的相似之处在于,它们都解决了“如何在JavaScript平台上解决超大规模编程”的问题。为什么在这里强调“非常大规模”?如果你参与过没有类型约束的多人协作项目,你可能会像笔者一样遇到“Cannotreadproperty'xxx'onundefined”之类的问题,然后到这个“xxx”一行一行去解决问题。早在2018年,异常监控平台Rollbar就从1000+个项目中统计了前端项目中Top10的错误类型,其中有7个是类型错误:结果发现很多都是null或者undefined错误。如果你使用严格的编译器选项,像TypeScript这样的静态类型检查系统可以帮助你避免这些错误,使用ReScript也可以解决这样的痛点。毕竟,JavaScript只是一门在一周内诞生的语言,而像ReScript和TypeScript这样的语言填补了JavaScript存在的空白。ReScriptVSTypeScript尽管ReScript和TypeScript都是为了更好地使用JavaScript而出现的,但两者之间仍然存在很大差异,例如:?类型系统的实现不同。TypeScript的目标是涵盖整个JavaScript功能集。而ReScript只涵盖了JavaScript的一部分;?ReScript代码没有空/未定义错误;?ReScript非常快,它是用于JavaScript开发的最快的编译器和构建系统工具链之一;?不需要类型注释,这些类型由语言推断,非常正确;?迁移到TypeScript是广度优先的,而迁移到ReScript是深度优先的。如何理解?再来看看最经典的HelloWorldHello,TypeScriptTypeScript提供了一个在线PlayGround,甚至可以分享,比如下面代码的分享url:https://www.typescriptlang.or...我们把鼠标放在在console.log中你会看到一个提示:(method)Console.log(message?:any,...optionalParams:any[]):void(+1overload),这就是TypeScript的神奇之处。你好,ReScriptReScript还提供了一个在线的PlayGround,也是支持分享的,比如下面代码的分享url:https://rescript-lang.org.cn/...我们这里不能用console.log,我们需要用到Js.log,Js.log("HelloWorld")可能是一个比较小的例子。同样鼠标指针会提示string=>unit,这里的string必须用双引号括起来,类型推断为string。本地运行ReScriptgitclonehttps://github.com/rescript-lang/rescript-project-templatecdrescript-project-templatenpminstallnpmrunbuildnodesrc/Demo.bs.js编译速度作者尝试在本地运行ReScript,安装官方文档并将HelloWorld下载到本地,执行npmrunstart,感受下ReScript的编译速度,太快了!不禁想起友达的Vite——“快!快速地!快速地!”这里没有对比TypeScript的编译速度。网友表示:大部分使用ReScript的项目可以在200ms内增量编译,而TypeScript可能在10K的文件monorepo直接内存溢出挂掉。类型推断在ReScript中,不需要类型注释,这些类型是由语言推断的,而且非常正确;在TypeScript中,如果不加类型注解,默认是any,如下图代码所示,ReScript可以正常推断输入输出参数应该是int,TypeScript可以编译通过。此外,ReScript还有管道、模式匹配、uniqueif语句等,这些在细节上与TypeScript有很大不同。如果你对ReScript和TypeScript感兴趣,欢迎和我一起探索和分享!点击关注,第一时间了解华为云的新鲜技术~