古语说的好,长江后浪推前浪。作为一名程序员,我一直很偏爱JavaScript,不为什么,就是因为强大。但是,TypeScript的出现,与之形成对比,让我不得不开始考虑TypeScript,下面我就为大家解析一下我为什么要开始用TypeScript。

作者 | Jamie Morris

译者 | 苏本如,责编 | 毛中政

出品 | CSDN(ID:CSDNnews)

以下为译文

JavaScript可能是一种事实上的现代Web开发语言,它也是我一直是我选择用来编写脚本的语言。用Python编写代码很有趣,但是如果我有一些东西要自动化,我会使用Node。

在过去,我选择的服务器端语言是C#,但现在我感觉它很笨拙,尽管它很强大。我曾经天真地认为Node是服务器端语言的“神来之笔”,它满足了我编写代码的一切需求。我甚至可以有很多种不同的方式使用JavaScript来编写安卓(Android)和iOS应用程序。

我并不是说JavaScript对于编写任何程序来说,是一个完美的工具,但是多年来它确实对我非常有用。

我一直坚定地承认JavaScript在Web前台的繁重的开发工作上的一些缺陷,这包括了Gary Bernhardt在他的戏谑性的 “Wat?” 闪电演讲中令人一想起来就会发笑的例子。如果你从来没有看过这个视频,现在就停下你的阅读,赶紧去找这个视频看看。看完后你会感谢我的。

Gary Bernhardt的这个闪电演讲现在已经成为我的推荐阅读列表的一部分,和Jonathan Creamer所写的“面向23世纪的JavaScript体系结构”这篇文章一起呈现给未来的前端开发人员。

虽然自从ES6出现以后,这篇文章中的一些内容看起来是多余的,但是它对于解释JavaScript需要从“普通编程语言”转变思维的事情(如果有这样的事情的话)有很大的帮助。这篇文章本身是我5年前开始自己的JavaScript之旅的一个重要原因。

但是为什么我现在威胁说要再也不用回JavaScript呢?答案很简单,因为TypeScript。

TypeScript是什么?

我猜你们已经听说过TypeScript,如果没有的话,让我试着总结一下:TypeScript是强类型的JavaScript语言。

它添加了你们对强类型语言所期望的一些特性,并且需要一个编译步骤(技术上这个步骤叫“Transpilation”)来将TypeScript转换为JavaScript的代码。这是因为浏览器不理解TypeScript。

从技术上讲,TypeScript不添加任何新的运行时特性,它只是为开发人员添加一些特性。

我听说有人把TypeScript说成是一种“不是爱它就是恨它”的开发语言,但是我还没有见过一个用过TypeScript的人说恨它。但是我和很多不想尝试它的人交流过。那是大约2016年中的事,其实我也是其中之一。

我听到的同行们对TypeScript的最坏批评是,它是一套需要额外学习的工具。不仅包括语言本身,还包括了构建过程。然而,大多数现代Web应用程序在其构建链中至少有一个链接以Babel的形式保留给JavaScript,而Babel是一个允许较新JavaScript在较旧的浏览器上运行的工具。

将TypeScript添加到这个链中不应该是件高难度的事,特别是因为Babel从v7版本开始就支持TypeScript编译。

尽管TypeScript不应该是一种高深的科学,但有时它会让人产生这种感觉。这就是为什么刚开始使用TypeScript的人有时会挣扎着回到JavaScript上的原因之一,因为JavaScript就在浏览器中运行。

TypeScript带来的好处

正如我上面所说,我从未听过有人使用TypeScript,这是件很遗憾的事。TypeScript带来的好处远远大于它的困难,特别是在Angular CLI(Angular命令行接口)或Create- React-App(注:是一个官方支持的创建React单页应用程序的方法)大行其道的那个时代,这两个工具都允许你在几分钟内开始一个新的支持TypeScript的项目。

我想你已经知道这些好处是什么,但如果你不知道的话,请允许我总结一下:

TypeScript的编译步骤可以让你及早发现问题,而不是等待运行时失败。

你的IDE现在甚至可以在编译步骤之前提示你一些错误。想象一下,如果你的IDE能够告诉你正在引用一个不存在的变量,或者正在使用错误的参数来调用一个函数,那真是革命性的进步!(当然,这里我是开玩笑的,因为“真正的”编程语言很多年前就有了这些功能)

当ECMAScript(驱动JavaScript语言的标准)中提出新的特性时,TypeScript能够很早地采用它们,让你一直保持在技术最前沿。

但实际上,TypeScript的主要好处是,它可以让你的代码以JavaScript无法描述的方式进行自我描述。

你可能认为,当你是一个项目的唯一开发人员时,JavaScript并没有那么糟糕,因为所有的东西都在你的脑子里,而且你有完美的记忆力,是这样吗?不,你错了。即使作为一个项目的唯一开发人员,我在编写代码时也容易出现一阵阵健忘症。

现在,当我编写普通的JavaScript时,我讨厌阅读一个函数的定义来搞清楚如何使用它。我不知道它会返回什么(如果有返回值的话)或者它接受什么样的参数。我可能知道参数名称和个数,但这并不总是足够的(如下面代码所示):

1 Function doTheThing() {
2  let error = false;
3
4  // About a million lines of code that might cause an error
5
6   return error;
7 }
8
9 function consumeTheThing() {
10  let error = doTheThing();
11  if (error) {
12  // What do I do with the error now?
13  }
14 }

这就是我想要表达的。这里的“error”是一个布尔型的值吗?当我看到第2行时,它看起来确实是这样的,但是从那里到结束的“doTheThing”行之间的一百万行代码中间的“error”呢?它可能是一个字符串,或者一个对象,或者天知道是什么。

你可能会认为这种灵活性是一种资产。它可以是,但更多的时候,它是一个陷阱,引诱你进入一种容易出错的方式,在你和你的同事之间制造很多小挫折。有没有在进入别人的代码中,感到自己像在迷宫里的感觉?

这就是你的代码在别人看来的样子。你可以用JavaScript编写“好”的代码,但是很少有关于该语言的内容鼓励你这样做。

而这正是TypeScript的美妙所在。它不会强迫你成为一个好的开发人员。但它给了让你成为好的开发人员的工具。

TypeScript缺点

TypeScript有缺点吗?当然有。

更多的打字(指定类型),无论是从两个方面的那一个来看都是这样。你的键盘会磨损得更快(这可能是你们中使用蝴蝶键盘的人所担心的),这没什么大不了的。

但是一些JavaScript开发人员讨厌在每个新函数或变量中键入类型。你不必非这么做不可,但是如果你不使用类型,为什么要使用TypeScript呢?

因为代码必须编译,因此每次更新和测试运行需要稍长一点时间。其实需要的只是多几秒钟而已,而使用TypeScript节省的时间远远超过编译它所花费的时间。

构建一个项目的复杂性有时是非常痛苦的。这是真的。如果你不熟悉你的构建工具,构建一个新项目可能是一个令人沮丧的体验。

短期内我的建议是找一个启动项目让你开始。至于长期的建议,我建议你花时间学习工具-tsc,Babel,WebPack和所有的有用的工具。

我觉得我的论点有点倾向性。我并没有把重点放在TypeScript的缺点上,而是放在更多地强调优点上。我猜这也是我不会花太多时间论证每顿饭都吃麦当劳的好处的原因,因为这样做的好处是有限的(不用再做饭了……我想只是这样)。

关于TypeScript的统计

像往常一样,StackOverflow提供的数据会判断我的看法是对还是错。表面上的数据来看,我好像错得太离谱了。

根据StackOverflow 2019开发者调查报告,JavaScript已经连续第七年成为StackOverflow上谈论最多的语言,67.8%的受访者都在使用它,而TypeScript在这个排名中名列第十,它正在被21.2%的受访者使用。

但是在2018年,TypeScript的这个统计数字只为17.4%,而再前一年仅为9.5%。2016年的时候,甚至只有0.47%的受访者使用TypeScript。

在这个角度来看,TypeScript这些年来有了惊人的增长,这主要归功于Angular框架,它在早些时候放弃了对JavaScript的支持。

当你看到“最受欢迎”的语言排名时,TypeScript的表现更加抢眼了,它以73.1%的比分排名了第三位(位列Rust和Python之后)。而JavaScript以66.8%排在第11位。

前景

我不认为TypeScript会很快取代JavaScript,理解后者对于前者的工作至关重要。而且我们也不会看到TypeScript在任何浏览器中以本机方式运行。

TypeScript是一个预处理器,就像之前的CoffeeScript一样。TypeScript和CoffeeScript的区别在于后者是对构建它的语言的根本性改变,而TypeScript是一种自然演变。这不仅仅使得学习它更容易,而且使得从JavaScript项目转换为TypeScript的过程更为渐进。首先简单地将所有以.js结尾的文件重命名为以.ts为结尾的文件,你就有了一个TypeScript项目!

然后,你就可以一步一步地开始采用TypeScript的语言特性。我不能保证这个过程会很容易,但是它会告诉你一些JavaScript永远无法做到的事情。当你开始下一个项目时,TypeScript编译器将会在那里等待你。

所以,使用了TypeScript,我知道我再也不会用回JavaScript了。

原文:https://medium.com/JavaScript-in-plain-english/ill-never-go-back-to-JavaScript-16370dc264a0

本文为 CSDN 翻译,转载请注明来源出处。

【End】

Python的这几个技能,简直太酷了

https://edu.csdn.net/topic/python115?utm_source=csdn_bw

热 文 推 荐 

☞神龙神龙你擦亮眼,阿里巴巴要“上天”!

传 ofo 年底裁员超 50%;Vivo 支持谷歌 Fuchsia OS;Spring Boot 2.2.2 发布 | 极客头条

程序员的救星-ThinkPad T490 对比体验

☞“给微软的 10 条建议!”

☞华为生产不含美国芯片的手机!

☞抢饭碗?00 后程序员来了!

☞微软张若非:搜索引擎和广告系统,那些你所不知的AI落地技术

☞【图解】记一次手撕算法面试:字节跳动的面试官把我四连击了

点击阅读原文,即刻参加调查!

你点的每个“在看”,我都认真当成了喜欢

TypeScript 让你不会想用回 JavaScript相关推荐

  1. iphone备忘录突然没了_为什么用过iPhone的人都不再想换回安卓?网友:过于真实,哭了...

    相信有很多小伙伴身边都有用iPhone手机的人,其中不乏有多年使用安卓手机的小伙伴转到iPhone手机的阵营中,并且很多人都表示,不再想换回安卓手机了.那为什么iPhone手机这么贵还有那么多人买呢? ...

  2. 什么是TypeScript?为什么我要用它代替JavaScript? [关闭]

    本文翻译自:What is TypeScript and why would I use it in place of JavaScript? [closed] Closed . 已关闭 . This ...

  3. 强类型的JavaScript(TypeScript)–现在没有任何理由不要深入JavaScript!

    目录 介绍 那么,什么是TypeScript? 如何使用TypeScript? 在哪里可以快速学习TypeScript? 介绍 .NET的支柱,或者说,c#一直以来都是在编译时得到的强大的类型检查.它 ...

  4. git add . 之后 想执行回滚操作(git add 到本地仓库的代码回滚到没有add 之前的操作)

    git add 到本地仓库的代码回滚到没有add 之前的操作 ,如果git 非常熟悉临时忘记了命令 回滚单个文件的命令:git restore --staged  xx文件名 回滚所有add 的文件直 ...

  5. 想救回硬盘里的小姐姐,你需要知道这些

    本文转载自程序员不高兴 月黑风高夜,回到家,躺上床,打开电脑,习惯性的去找隐藏起来叫「学习文件」的文件夹. 准备心情愉悦的看上一段精彩电影. 结果,快乐还没开始就已经结束了. 我好像前两天把这个盘给格 ...

  6. 恋爱期间收对方几十万,分手后想要回

    近日,北京东城区法院审理了一起情侣分手后发生的金钱纠纷案件. 男子小徐将前女友小刘诉至东城区法院,称小刘向自己借款共计61万余元,多次催讨无果,请求法院判令小刘支付欠款并承担诉讼费用.小刘则辩称双方此 ...

  7. 12.2. 如果你不习惯使用firewalld想用回Iptables

    安装iptables # yum install iptables-services# vim /etc/sysconfig/iptables *filter :INPUT ACCEPT [0:0] ...

  8. 嘿,这里有你想要的Javascript本源

    以下数据希望能够间接帮助到您!! arguments 函数传参-实参的集合 arguments.length 函数传参-实参的长度 arr.push() 向数组最后添加一项 arr.unshift() ...

  9. java输入长宽高计算表面积_我想问一下javascript,要求用户输入长宽高,然后计算出来 总面积,体积,和长宽高总和...

    这是我自己写的,不知道为什么总是不能显示出来计算结果,有高手给我看看嘛,小弟感激不尽!!!!!!!!-//W3C//DTDXHTML1.0Transitional//EN""htt ...

最新文章

  1. 电脑开机时光驱咔咔响_电脑蓝屏了我该怎么办!
  2. 日本光伏相关企业倒闭数量上升 帝国征信调查
  3. 后宫佳丽三千,皇后只有一个
  4. Java多线程常用方法
  5. 考察数据科学家支持向量机(SVM)知识的25道题,快来测测吧
  6. win7可以运行的mysql,win7下mysql安装
  7. 深度学习与计算机视觉系列(3)_线性SVM与SoftMax分类器--在深度学习的视觉分类中的,这两个分类器的原理和比较
  8. 设计模式之单例模式-C++
  9. 深度学习和OpenCV-python读书笔记一(DNN介绍)
  10. java继承与多态 心得体会_继承与多态感想
  11. 我的J2EE成功之路:实战Ajax,JSP,Struts 2, Spring,Hibernate
  12. Pandownload作者被抓后,我决定用docker搭建一款私有网盘
  13. java基础70 负责静态的网页制作语言XML(网页知识)
  14. 教你学坏^_^(一段病毒代码)
  15. html表格的冻结列
  16. SCI、EI、ISTP、ISR简介
  17. rpg服务器无限刷金币bug,荆棘谷惊现无限刷金BUG 无脑跑商盆满钵满
  18. 疑难杂症、易混淆、易遗忘的知识点记录
  19. 【相机标定系列】相机sensor传感器尺寸,CMOS靶面尺寸,分辨​率​和​镜头​焦距,畸变处理效果,相机主点
  20. 手机网站(wap)广告展示一般都有哪些表现形式?

热门文章

  1. VS2010编译驱动程序
  2. Hadoop Ambari 安装
  3. ToString yyyy-MM-dd ,MM 小写的故事。
  4. 2012年8月20日 我单身了!
  5. ashx是什么文件,什么时候使用ashx
  6. linux在电子信息工程行业中的应用,电子信息工程概述论文
  7. Web接收实时视频流并显示(flask创建路由接收)| 解决延时不同步问题
  8. 查找——顺序、二分法、斐波那契、插值、分块
  9. 数字轮廓投影仪行业调研报告 - 市场现状分析与发展前景预测
  10. 做游戏,学编程(C语言) 5 数组之生命游戏