JavaScript可能是现代网络事实上的语言,但它也是我长期以来选择的脚本语言。用Python编码很有趣,但如果我有一些东西可以自动化,我会选择node。我选择的服务器端语言曾经是C#,但今天它功能强大但感觉笨拙。我曾经天真地将Node形容为“势不可挡”,它满足了我所写的一切需求。我什至可以用多种不同的方式用JavaScript编写Android和iOS应用程序。并不是说它是适用于所有事物的完美工具,但多年来它一直为我服务。我一直在讽刺地承认这个家庭的支柱网络上出现的缺陷,包括加里伯恩哈特的嘲讽“Wat?”闪电般的谈话让我还在思考。如果您以前从未看过,请立即停止阅读并继续观看。您可以稍后感谢我。Lightningtalk与JonathanCreamer的“23世纪的JavaScript体系结构”一起成为我为前端开发人员推荐的阅读列表(查看列表或消费列表?)的一部分。虽然自从ES6出现以来,上一篇文章中的一些内容可能看起来是多余的,但它与解释JavaScript所需的思路还有很长的路要走,这需要从“常规”编程语言(如果有的话)转变为思维方式。仅那篇文章就是我5年前开始自己的JavaScriptOdyssey的主要原因。那么,为什么我现在威胁要离开并且再也不会回来呢?答案很简单。打字稿。什么是打字稿?我假设您听说过Typescript,但如果没有,请尝试总结一下:Typescript是强类型的Javascript。它添加了您期望从强类型语言获得的功能,并且需要一个编译步骤(技术上称为“翻译”)将Typescript转换为JavaScript。这是因为浏览器不理解Typescript。从技术上讲,Typescript没有添加任何新的运行时功能,它为开发人员添加了功能。我听说人们对Typescript的描述是喜欢它还是讨厌它,但我还没有和任何尝试过但又讨厌它的人交谈过。我和很多犹豫不决的人谈过——大约在2016年年中,我就是其中之一。然而,我从同行那里听到的对Typescript最严厉的批评是,它是一种额外的学习工具。不仅是语言,还有构建过程。然而,大多数现代Web应用程序在其构建链中至少有一个以Babel形式保留给JavaScript的链接,Babel是一种允许较新的JavaScript在较旧的浏览器上运行的工具。将TypeScript添加到该管道不应该是火箭科学,特别是因为Babel从v7开始就支持Typescript编译。它不应该是火箭科学,但有时会有这种感觉,这也是Typescript新手有时会挣扎并回到在浏览器中运行JavaScript的流行的原因之一。好处但是就像我说的,我从来没有听说过有人在采用Typescript后后悔了。好处远远大于困难,尤其是在使用AngularCLI或CreateReactApp的时代——这两者都可以让你在几分钟内开始使用一个新的支持Typescript的项目。我假设你知道这些好处是什么,但如果你不知道,请允许我总结一下:Typescript的编译步骤意味着你可以及早发现问题,而不是等待运行时失败。您的IDE现在可以在编译步骤的早期提示您。想象一下,当您引用一个不存在的变量或调用一个带有错误参数的函数时,您的IDE会告诉您!一场真正的革命!(当然,因为“真正的”编程语言已经享受了很多年,所以我一直在使用Justkidkid。)编辑:我怎么强调都不为过。我最近将一个旧项目从JavaScript转换为Typescript,以了解我从别人那里继承的代码库的复杂性。这是一个渐进的过程,在此期间团队不断交付新功能,但我们遇到了一些示例代码,其中我们错误地使用了第三方库。也许API改变了,或者有人误读了文档,但我们传递了某些完全不做任何事情的配置变量。Typescript立即告诉我们,我们删除了违规代码。显然,这是不受欢迎的,而且非常具有误导性。当在ECMAScript(驱动JavaScript的标准)中提出新功能时,TypeScript可以尽早采用它们,让您始终处于最前沿。但实际上,主要的好处是Typescript使您的代码能够以JavaScript无法实现的方式进行自我描述。当我是项目中唯一的开发人员时,JavaScript并没有那么糟糕,因为我可以把所有事情都记在脑子里,而且我有完美的记忆力,对吧?错误的。即使作为单独的开发人员,我编写的代码也容易失忆。这些天,当我编写纯JavaScript时,我讨厌必须阅读函数定义才能弄清楚如何使用它。我不知道它返回什么(如果有的话)或它接受什么参数。我可能知道参数的数量和它们的名称,但这还不够:functiondoTheThing(){leterror=false;?}}那就是我的意思。“错误”是布尔值吗?当我看到第2行时,看起来的确如此,但是“doTheThing”末尾之间的百万行代码呢?它可以是字符串、对象或知道什么的人。您可能会说这种灵活性是一种资产。可能是这样,但更多的时候是一个圈套,引诱你走捷径,导致你和同伴之间产生许多细微的挫折。是否曾经在别人的代码中间感觉自己在迷宫中?那是别人的代码。您可以用JavaScript编写“好的”代码,但很少有人鼓励您这样做。这就是TypeScript的美妙之处。它不会强迫您成为一名优秀的开发人员。但这为您提供了执行此操作的工具。有什么缺点吗?当然有。从字面上看,更多的打字。您可以更快地敲击键盘(这对于使用蝶式键盘的人来说可能是个问题)。没什么大不了的,但是一些JavaScript开发人员讨厌必须为每个新函数或变量写出类型。你不必,但如果你不使用类型,为什么要使用Typescript?由于您必须编译代码,因此每次更新和每次测试运行都需要一点时间。但是,我们说的是秒。我使用Typescript节省的时间远远超过编译它所花费的时间有时构建项目的复杂性可能是一个真正的痛苦。这是事实——如果您不熟悉构建工具,那么设置一个新项目可能会令人沮丧。在短期内,我的建议是找到一个入门项目来帮助您入门——如果您正在考虑这些框架,那么前面提到的AngularCLI和CreateReactApp非常适合。长期?花时间学习工具-tsc、Babel、WebPack和所有这些好东西。如果您使用的是节点,请尝试ts-node。如果您使用的是Mocha,请尝试ts-mocha。有一些简单的快捷方式可以帮助您入门。这有点像我的观点是片面的——我想我不会过分强调利弊,出于同样的原因,我不会花很多时间在每餐吃麦当劳的利弊上——那方式制作它的好处有限(不必再做饭了……我想就是这样)。在未来,我不会很快看到Typescript取代JavaScript——理解后者对于使前者发挥作用至关重要。我们不会看到Typescript在任何浏览器中本地运行。它是一个预处理器,就像之前的CoffeeScript一样。Typescript和Coffescript之间的区别在于,后者是对其所基于的语言的根本改变。打字稿是一种自然演变。这不仅使学习变得更容易,而且还使将JavaScript项目转换为Typescript的过程更加繁琐。首先重命名*.js为*.ts。你现在有了一个Typescript项目!然后,您可以开始一次采用一个语言功能。我不能保证它会很容易,但它会告诉你一些你以前从未接触过的关于JavaScript的事情。当你开始你的下一个项目时,Typescript编译器会等待,这就是我从不回头的原因。
