JavaScript编程语言历史悠久,但它是在 1995 年大约一周内创建的。
它最初被称为 LiveScript,但后来更名为 JavaScript,以赶上 Java 的潮流,尽管它与 Java 毫无关系。
它很快就变得非常流行,推动了 Web 应用程序革命,并得到了地球上几乎所有 Web 浏览器的支持。
如今,JavaScript 可能是世界上最常用的编程语言。
多年来,我一直说 JavaScript 之于 Web 浏览器就像汇编代码之于 CPU。
当然,汇编语言是一种强大的语言,就像 JavaScript 一样,但我们拥有高阶语言是有原因的。
鉴于如今浏览器才是真正的操作系统,JavaScript 应该------而且最终会------在开发人员的心中走上汇编语言的道路。
我并不否认 JavaScript 的成功和有效性。Web 就是建立在它之上的,尽管它存在很多缺陷,但人们还是用它做出了许多了不起的事情。
但我就是无法将 JavaScript 视为一种我们应该编写的语言,就像今天只有极少数开发人员编写汇编语言一样。
在构建 Windows 应用程序时,我更喜欢让编译器编写我的汇编语言,在构建 Web 应用程序时,我更喜欢让编译后的 TypeScript 为我编写 JavaScript。
TypeScript则是另一回事。现在有了一种编程语言。
TypeScript 由伟大的Anders Hejlsberg设计,它具有 JavaScript 的所有优点(例如它们本身),同时还添加了一个富有表现力和强大的类型系统。坦率地说,我不明白为什么有人会更喜欢 JavaScript 而不是 TypeScript。
为什么不使用 TypeScript?
首先,您可以按照自己的节奏开始使用 TypeScript。这不是全有或全无。所有 JavaScript 代码都是 TypeScript 代码。我(主要)开玩笑说,我很乐意收取一笔不小的费用,将所有 JavaScript 开发团队转变为 TypeScript 开发人员,只需将所有 *.js 文件更改为 *.ts 文件即可。
通过这一更改,他们将成为一家 TypeScript 商店,他们根本不需要改变编写代码的方式。然后他们可以逐渐开始按照自己的意愿使用 TypeScript。
我缺乏理解进一步源于开发人员对使用 TypeScript 的无力反对。
"所有这些类型都只是碍事而已"
好吧,当然,他们可能会妨碍你。你也许可以快速解决一些问题,并且了解你编写的代码的一切。
但是,当那些可怜的人看到你六个月或一年前的代码时,他们不得不试图弄清楚你在想什么,那该怎么办呢?(别介意那个可怜的人可能是你......)
这就像说"我想在一年内遇到无法预见的问题,而我却记不起所有这些代码应该做什么。"
通过输入所有内容,您可以清楚简洁地声明代码意图,并在整个代码库中执行这些意图。对于拥有许多开发人员的应用程序,能够清楚明确地表达代码的功能,这比需要其他开发人员花费认知精力才能弄清楚的代码具有巨大的优势。
"JavaScript 非常适合快速制作原型"
好吧,这没问题,但请考虑一下:我们都知道"原型"的概念有点可笑。可悲的是,将原型扔到一边并重新启动"真正的"应用程序的情况很少见。
原型成为真正的应用程序,您将永远陷入在匆忙拼凑原型时做出的糟糕基础决策中,您曾说过您永远不会部署原型,但最终还是部署了它。快速拼凑某物的能力并不是一种美德。
"JavaScript 非常适合初学者"
当我听到这个时,我想,"我希望崭露头角的开发人员学会以坏习惯来编码,而不是学习真正的编程语言是如何工作的。"
"打字打得太累了,我的手指都累了"
我的意思是,拜托。这是我听过开发人员给出的最糟糕的借口,我为那些认真提出这个借口的开发人员感到羞愧。
您可以在构建系统时键入内容,也可以在以后维护、重做和修复系统时进行更多键入。
因为键入内容太多而不想编写清晰、明确的代码是荒谬和懒惰的。
所有这些额外的键盘工作都可以让您充分表达代码的作用。您可以多键入一点。天哪。
"TypeScript 编译器只能发现小错误"
嗯,是的。完全正确。
"所有这些类型都存在太多错误"
嗯,是的。完全正确。
好吧,最后两条评论有点轻率。但错误才是重点。
TypeScript 编译器会发现错误,如果未通过测试发现,这些错误可能会在部署时出现。
在开发周期的早期发现问题总是更好的,没有什么比在您输入错误时立即显示一个小红色波浪线更早的了。
至于"错误太多",嗯,这是一个功能。TypeScript 是精确的,编码时精确是好的和可取的。
使用 JavaScript 时,你可以用无数种方式来自讨苦吃。
我看到太多"猜猜这个 JavaScript 代码会输出什么!"的问题。如果一种语言中存在歧义和不精确,那么这种语言将导致有缺陷的代码。
如果您必须运行代码才能知道它的输出应该是什么,那么您的代码就是错误的。
"我可以使用单元测试来确保我的代码正常运行"
这是一个让我犹豫的论点。我喜欢单元测试和测试驱动开发,我认为我们都应该以这种方式编写代码,所以这个论点很有说服力。但后来我想起你也可以用 TypeScript 进行单元测试,所以这个论点有点站不住脚。
糟糕的编程语言,糟糕的代码
当您说"我可以用 JavaScript 快速开发"时,我听到的是"这个项目将成为维护的噩梦。"
当您说"我不喜欢所有那些冗长的内容。JavaScript 更简单、更简洁"时,我听到的只是"我喜欢当我回头看代码时,代码是难以理解的。"
当您说"我只想解决问题,而不是处理所有这些类型"时,我听到的是"我只想以后给自己制造一大堆问题。"
当您说"很难将类型放在所有东西上"时,我听到的是"哇,哇,哇,哇。"
最终,JavaScript 成为了在正确时间出现的正确事物。它最终被折叠、扭曲和肢解,用于它并不适合的用途。
这就是 TypeScript 出现的原因。TypeScript 利用了 JavaScript 的普遍性,同时添加了现代类型系统的所有功能。这就是您应该使用 TypeScript 的原因。