网站首页 > 文章精选 正文
大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!
本文将重点介绍两个前端领域的明星项目 Deno 和 Svelte,因为它们本身框代码已经从 TypeScript 迁移到 JavaScript 从而成功引起了开发者的注意。话不多说,直接开始!
什么是 TypeScript
TypeScript 是 JavaScript 的超集,其建立在 JavaScript 之上,TypeScript 使用 JavaScript 语法,并添加了额外的语法来支持类型。首先,开发者编写 TypeScript 代码,然后使用 TypeScript 编译器将 TypeScript 代码编译为纯 JavaScript 代码。
拥有纯 JavaScript 代码后,可以将其部署到 JavaScript 运行的任何环境中。需要注意的是:TypeScript 文件的扩展是 .ts ,而不是 JavaScript 文件的 .js 扩展名。
如果 JavaScript 程序没有任何语法错误,那么,它也是一个 TypeScript 程序。这意味着所有的 JavaScript 程序都是 TypeScript 程序,如果要将现有的 JavaScript 代码库迁移到 TypeScript,这非常有用。
TypeScript 是 2022 年排名增长最快的语言,并且在过去五年使用率显著增长,从 2017 年的 12% 上升到 2022 年的 34%。作为 JavaScript 的主要替代形式之一,TypeScript 非常受欢迎,尤其是在大型 JavaScript 开发人员中,这一切都得益于它的项目可扩展性、协作性和代码可维护性。
当然,有为 TypeScript 喝彩的,也有唱衰 TypeScript 的,本文将重点介绍两个前端领域的明星项目 Deno 和 Svelte,因为它们本身框代码已经从 TypeScript 迁移到 JavaScript 从而成功引起了开发者的注意。
Deno
2020 年左右,Deno 内部的代码实现从 TypeScript 成功切换到 JavaScript。主要基于以下几个原因:
- 更改文件时 TypeScript 编译时间需要几分钟,使得连续编译成为一个极其缓慢的过程
- 在创建实际 Deno 可执行文件和面向用户的 API 源文件中使用的 Typescript 结构正在造成运行时性能
- TypeScript 并没有证明有助于 Deno 代码组织,甚至适得其反。 比如:在两个位置有重复的独立 Body 类 https://github.com/denoland/deno/issues/4748
- 内部代码和运行时 TypeScript 声明必须手动保持同步,因为 TypeScript 编译器对生成 d.ts 文件没有帮助
- 需要维护两台 TS 编译器主机:一台用于内部 Deno 代码,另一台用于外部用户代码,尽管目的相同。
Deno 团队的目标是删除所有构建时 TS 类型检查和内部 Deno 代码的打包,期待将所有运行时代码移动到一个 JavaScript 文件中。 但是,Deno 仍将使用配套的 d.ts 文件来保存类型定义和文档。
值得一提的是,Deno 仅停止对内部 Deno 代码使用 TypeScript,而 Deno 用户代码仍将使用 TypeScript,因此需要进行类型检查。
虽然 TypeScript 有时被视为 JavaScript 的改进版本,但事实并非总是如此, TypeScript 语言也有先天缺陷, 比如:最重要的编译时间。
虽然小型项目在从纯 JavaScript 切换到 TypeScript 时可能不会看到编译时间的巨大峰值,但在大型项目(如复杂的 React 应用程序)中却会很明显。 鉴于 Deno 运行时的庞大规模,Deno 停止使用 TypeScript 也就不足为奇了。
开发期间类型检查的安全性在编译时确实有其成本, TypeScript 项目有大量关于如何解决和改进编译时间的文档,这并非没有原因。 最有趣的方法之一是使用项目引用,它允许开发人员将一大段 TypeScript 代码分解成更小的部分。
Svelte
Svelte 是一种构建 Web 应用程序的新方法。它是一个编译器,可以获取声明性组件并将它们转换为高效的 JavaScript,从而轻松地更新 DOM。目前 Svelte 已经通过 MIT 协议开源,在 Github 上狂揽 66.9K 的 star、3.3k 的 fork、超过 167k 的项目依赖量,代码贡献者 600+,妥妥的前端佼佼者。
然而,2023 年 3 月 20 日凌晨 3:00,Svelte 的作者 Loraine Lawson 发布了一条重磅消息:
The team is switching the underlying code from TypeScript to JavaScript. That and the update will then allow the team to incorporate “big ideas” for Svelte 5 later this year, he added.
意思就是说,Svelte 团队正在将底层代码从 TypeScript 切换到 JavaScript, Loraine Lawson 还补充说到,这一切都是为了 Svelte 5 而准备。有开发人员还专门去 Twitter 询问,发现这一切都是真实在发生的。
Loraine Lawson 感慨自己已经做了十年的开发,从来没有遇到过 JavaScript 的松散类型带来的诸多问题。 而使用 TypeScript,需要用 15 分钟编写代码,但可能需要 2 小时试图安抚静态类型的神 。这也就很容易理解,为什么 Svelte 要放弃 TypeScript 而拥抱 JavaScript 了。
本文总结
本文主要和大家介绍两个前端领域的明星项目 Deno 和 Svelte,因为它们本身框代码已经从 TypeScript 迁移到 JavaScript 从而成功引起了开发者的注意。关于Deno vs. Svelte,文章并没有过多展开,如果有兴趣,可以在我的主页继续阅读,同时文末的参考资料提供了大量优秀文档以供学习。最后,欢迎大家点赞、评论、转发、收藏!
参考资料
https://docs.google.com/document/d/1_WvwHl7BXUPmoiSeD8G83JmS8ypsTPqed4Btkqkn_-4/edit
https://startfunction.com/2020/06/09/deno-will-stop-using-typescript/
https://github.com/denoland/deno/pull/6793
https://github.com/sveltejs/svelte
https://twitter.com/Rich_Harris/status/1639344836766576640
https://gomakethings.com/ditching-typescript-for-javascript/
https://blog.csdn.net/m0_61643133/article/details/127646247
猜你喜欢
- 2025-05-14 TS,TypeScript,Windows环境下构建环境,安装、编译且运行
- 2025-05-14 TypeScript 也能开发AI应用了!
- 2025-05-14 搞懂 TypeScript 装饰器
- 2025-05-14 前端小哥哥:如何使用typescript开发实战项目?
- 2025-05-14 在 React 项目中,一般怎么处理错误?
- 2025-05-14 react19 常用状态管理
- 2025-05-14 Vue3开发极简入门(2):TypeScript定义对象类型
- 2025-05-14 C#与TypeScript语法深度对比
- 2025-05-14 360前端一面~面试题解析
- 2025-05-14 Python标准库中的七个“小众但神奇”的实用函数
- 05-14TS,TypeScript,Windows环境下构建环境,安装、编译且运行
- 05-14TypeScript 也能开发AI应用了!
- 05-14搞懂 TypeScript 装饰器
- 05-14前端小哥哥:如何使用typescript开发实战项目?
- 05-14在 React 项目中,一般怎么处理错误?
- 05-14react19 常用状态管理
- 05-14Vue3开发极简入门(2):TypeScript定义对象类型
- 05-14C#与TypeScript语法深度对比
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)