极客视点
极客时间编辑部
极客时间编辑部
113243 人已学习
免费领取
课程目录
已完结/共 3766 讲
2020年09月 (90讲)
时长 05:33
2020年08月 (93讲)
2020年07月 (93讲)
时长 05:51
2020年06月 (90讲)
2020年05月 (93讲)
2020年04月 (90讲)
2020年03月 (92讲)
时长 04:14
2020年02月 (87讲)
2020年01月 (91讲)
时长 00:00
2019年12月 (93讲)
2019年11月 (89讲)
2019年10月 (92讲)
2019年09月 (90讲)
时长 00:00
2019年08月 (91讲)
2019年07月 (92讲)
时长 03:45
2019年06月 (90讲)
2019年05月 (99讲)
2019年04月 (114讲)
2019年03月 (122讲)
2019年02月 (102讲)
2019年01月 (104讲)
2018年12月 (98讲)
2018年11月 (105讲)
时长 01:23
2018年10月 (123讲)
时长 02:06
2018年09月 (119讲)
2018年08月 (123讲)
2018年07月 (124讲)
2018年06月 (119讲)
时长 02:11
2018年05月 (124讲)
时长 03:16
2018年04月 (120讲)
2018年03月 (124讲)
2018年02月 (112讲)
2018年01月 (124讲)
时长 02:30
时长 02:34
2017年12月 (124讲)
时长 03:09
2017年11月 (120讲)
2017年10月 (86讲)
时长 03:18
时长 03:31
时长 04:25
极客视点
15
15
1.0x
00:00/05:03
登录|注册

什么情况下,你应该使用TypeScript?(上)

讲述:初明明大小:4.62M时长:05:03
你好,欢迎收听极客视点。
TypeScript 是近年来颇受欢迎的一种语言。此前,开发者哈利勒·斯坦姆勒(Khalil Stemmler)发文探讨了在什么情况下绝对应该使用 TypeScript 这种类型严格的编程语言,又在什么情况下应该继续使用原生的 JavaScript。公众号“前端之巅”编译了该文章,重点内容如下。
首先思考一下为什么现在迫切需要探讨这个话题呢?
根据你的环境、项目、技能水平和其他因素而言,如果你的项目不使用 TypeScript 编写,可能会是非常危险的。
前端领域正在变得越来越复杂。很多特性曾经被认为是前沿技术,现在已经成为许多标准化的用户体验基础。例如,用户都希望你的应用在脱机状态下也能有一部分功能可用,而且当用户在线时,通常也会希望自己无需刷新页面即可获取实时通知。
这些要求是非常苛刻的,但今天来说也绝对不是什么不可能完成的任务。
在深入研究不同的场景之前,我们应该先讨论一下三类非常困难的软件问题:性能系统问题、嵌入式系统问题和复杂领域问题。

1. 性能系统问题

以 Twitter 为例,Twitter 实际上是一个非常简单的概念,用户注册,发表推文,给其他人的推文点赞,仅此而已。
既然 Twitter 这么简单,为什么其他人不能仿造一个呢?
显然,Twitter 的真正挑战不只是“做什么事情”,而是“如何做到这些事情”。
Twitter 面临着一个独特的挑战,那就是每天要满足来自大约 5 亿用户的请求,它解决的难题实际上是一个性能问题。
当挑战在于性能时,是否使用严格类型的语言就不那么重要了。

2. 嵌入式系统问题

嵌入式系统是计算机硬件和软件的组合,其目的是控制系统的机械或电气部分。
我们今天使用的大多数系统都是建立在非常复杂的代码层之上的,这些代码要么是 C 或 C++,要么就是能编译为这两种语言。
用这些代码编程可不是一般人随便能做的事情。在 C 语言中没有对象,它是程序性的,所以我们想要用它编写出简洁的代码就很困难。程序员还需要了解底层细节才能解决很多问题。C++ 确实具有面向对象的特性,能明显改善开发体验,但还是需要程序员与底层硬件细节进行直接交互。
因为这些场景中能使用的语言实际上没有太多选择,所以在这里讨论 TypeScript 也没什么意义。

3. 复杂领域问题

对于某些场景来说,程序员面临的挑战不是要处理大量请求,而是扩展代码库的大小。
很多企业需要解决现实生活中的一些很复杂问题。在这些公司中,最大的工程挑战通常是:
能够在逻辑层面(通过域)将单体组件分解成许多较小的应用。然后在物理层面将它们拆分开来,并分配给多个团队来维护。
处理这些应用之间的集成和同步需求。
建模领域概念并实际解决领域问题。
创建一种通用的(全包含)语言,以供开发人员和领域专家共享。
不会陷在规模庞大的代码泥潭中,也不会沦落到想添加新功能就一定要破坏已有功能的地步。
对于领域驱动设计所解决的问题类型的项目来说,你会毫不犹豫地使用像 TypeScript 这样的严格类型的语言。
对于复杂领域问题来说,如果你不选择 TypeScript,而是选择 JavaScript,则需要付出更多的努力才能成功。你不仅需要特别熟悉原生 JavaScript 中的对象建模能力,而且还必须知道如何利用面向对象编程的 4 个原理,即封装、抽象、继承和多态。
使用原生 JavaScript 很难实现 SOLID 设计原则中的“界面隔离”。
为了保持代码的整洁,单独使用 JavaScript 时还需要一定程度的开发人员纪律,这在代码库非常大时是至关重要的。你还需要确保你的团队成员拥有相同的学科、经验和知识水平,知道如何在 JavaScript 中实现常见的设计模式。否则的话你还需要指导他们才行。
在像这样的领域驱动项目中,使用严格类型语言的最大好处不在于表达可以做的那些事情,而更多的是使用封装和信息隐藏来限制程序员,告诉他们哪些领域对象才是可以使用的,从而减少错误的暴露面。
将 TypeScript 称为“可扩展的 JavaScript”是有原因的。
在所有三类软硬件问题中,只有复杂领域问题是一定要使用 TypeScript 的领域。
除此之外,还有其他一些因素可能会影响你的决策,让你知道什么时候应该在 JavaScript 项目中使用 TypeScript。这将在下文继续分享,欢迎持续关注。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
该免费文章来自《极客视点》,如需阅读全部文章,
请先领取课程
免费领取
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
大纲
固定大纲
1. 性能系统问题
2. 嵌入式系统问题
3. 复杂领域问题
显示
设置
留言
收藏
29
沉浸
阅读
分享
手机端
快捷键
回顶部